我學習編程的C編譯器(www.cc65.org)8位NES程序內存限制
的NES FC有8位6502處理器和RAM 2K的8位6502。但是,以下C編譯(成爲nes文件)並在VirtualNES仿真器中成功加載。
#include "conio.h"
#include "stdlib.h"
int dump[1000];
void main()
{
int *a;
a = (int*)malloc(19222999);
cputs("Hello, World!");
a[0] = 1;
for(;;); // loop forever, never ends
}
爲什麼這樣可以嗎?顯然我在上面的C代碼中分配了比2K更多的內存。
[請不要在C]中輸入'malloc()'的返回值(http://stackoverflow.com/a/605858/28169)。 – unwind
對於記錄,默認的CC65 NES設置/鏈接器腳本依賴於8 kB RAM擴展(基本上是購物車上的額外內存芯片)。否則,您的1000整數數組將無法適合2048字節的RAM作爲運行時還需要其他東西的空間。哦,我強烈建議你在NES上避免這種動態內存分配,否則你會遇到碎片問題。 – doynax
@doynax完整的確認。在嵌入式系統中,最好將'malloc()'的用法限制爲短暫的小內存塊,也可以用於需要「所有剩餘內存」的內存塊,在這裏我計算從內存參數分配的內存量我可以從鏈接器獲得這些分配。 – glglgl