我想在C中編寫一個指令集模擬器來模擬運行ARM的機器。 我需要能夠高效地表示4GB存儲器和一些挖掘之後都來創建的1024個指針每個指向的數組,其動態地在其第一次使用分配4MB的塊的溶液分別代表內存c
#define MEMSIZE 1024 //1024 * 2Mb = 4Gb
#define PAGESIZE 4194304 //4 Mb
#define PAGEEXP 22 //2^PAGEEXP = PAGESIZE
uint32_t* mem[MEMSIZE];
我問題是我如何訪問某個特定的內存地址?
我所嘗試的是將地址分解爲如下所示的索引和偏移量,但這似乎只對索引和偏移量返回0。 (memAdd是我試圖訪問的地址)
memIdx = memAdd >> PAGEEXP;
memOfs = memAdd & PAGESIZE;
我用它來閱讀功能/寫一次我的地址是下面:
void memWrite(uint32_t idx, uint32_t ofs, uint32_t val)
{
if(mem[idx] == 0)
mem[idx] = malloc(PAGESIZE);
*(mem[idx] + ofs) = *(mem[idx] + ofs) & val;
}
uint32_t memRead(uint32_t idx, uint32_t ofs)
{
if(mem[idx] == 0)
return 0;
else
return *(mem[idx] + ofs);
}
這些不過我似乎是正確的我的頭仍然不能百分之百地使用指針,所以這可能是錯誤的。
很抱歉,如果這已經討論的地方,但我不能找到任何培訓相關到什麼,我需要(我的關鍵字是非常寬泛的)
檢查malloc的失敗 - 如果(MEM [IDX] == NULL)... – djechlin
*評論刪除* –