나는 C 컴파일러 (www.cc65.org)에 NES FC는 8 비트 6502 프로세서와 2K RAM이8 비트 NES 프로그램 메모리 제한
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 설정/링커 스크립트는 8kB RAM 확장 (기본적으로 카트의 추가 메모리 칩)에 의존합니다. 그렇지 않으면 1000 정수 배열이 런타임으로 2048 바이트의 RAM에 맞지 않습니다 다른 것들을위한 공간도 필요합니다. 아, 그리고 NES에서 이러한 유형의 동적 메모리 할당을 피할 것을 강력히 제안합니다. 그렇지 않으면 조각화 문제가 발생합니다. – doynax
@doynax Full ack. 임베디드 시스템에서는 'malloc()'의 사용을 단명하고 작은 메모리 블록으로 제한하고 메모리 매개 변수에서 할당 할 메모리 양을 계산하는 "나머지 모든 RAM"이 필요한 메모리 블록으로 제한하는 것이 가장 좋습니다 할당은 링커에서 나에게 제공된다. – glglgl