これは本当に私を得ています。私はいくつかの追加機能も追加していますが、私がしようとしていることはリンクリストを実装することです。まず、いくつかのコード:ポインタの割り当てがプログラムのストールの原因となる
#include <stdio.h>
#include "host.h"
#include "misc.h"
#include "machine.h"
struct miss_pile{
md_addr_t tag;
unsigned int isCon;
char block_type;
char culprit_type;
struct miss_pile * next;
}*head=0, *linkPtr, *tail=NULL, *newLink;
typedef struct miss_pile mp;
void add_beg(md_addr_t new_tag/*int new_tag*/, char blk_type, char evicter_type){
newLink = (mp *)malloc(sizeof(mp));
newLink->tag = new_tag;
newLink->block_type = blk_type;
newLink->culprit_type = evicter_type;
newLink->isCon = 0;
if (head == NULL){
head=newLink;
head->next=NULL;
head->tag = new_tag;
head->block_type = blk_type;
head->culprit_type = evicter_type;
head->isCon=0;
}
else if (head != NULL)
{
newLink->next=head;
head = newLink;
}
}
私はプログラムは、私はこのコードを除外すると、プログラムは正常に実行されますが、もちろんその
head=newLink;
を停止するようだところ、この行があると判断しましたかなり重要なコード。どのような助けや洞察力があれば幸いです。
注意しておきたいことですが、プロセッサはプログラムが「座っている間」100%のままです。また、リストに追加するプログラムは、SimpleScalarの「sim-cache」シミュレータです。
どのシステムを実行していますか?私はLinux上でgdbのようなデバッガで、あるいはWindows上のビジュアル・スタジオの中のビルトインでそれを実行しようとします。 GDBの場合は、-gフラグを使用してプログラムをコンパイルします。 gdbにはたくさんのチュートリアルがありますので、私は細部まであなたを退屈させません。 –
私はUbuntu 10.10を仮想マシンで実行しています。 gdbを実行するといくつかの便利な情報が得られ、リスト検索ループのいくつかに詰まっているように見えます。これはちょうど時間の集中的な仕事かもしれませんか?このリストは数十万に達する可能性が非常に高いです。しかし、リストを短く保つべきsimplescalarの命令の数を制限しても効果はありません。 – morgan
私は、誰かがすぐに来て、「malloc()の結果をキャストしないでください」と言っている気がします: –