首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >8位NES程序内存限制

8位NES程序内存限制
EN

Stack Overflow用户
提问于 2013-11-25 15:47:15
回答 2查看 364关注 0票数 2

我正在C编译器中学习8位6502的编程(www.cc65.org)

NES FC有8bit 6502处理器和2K RAM。但是,下面的C编译(到一个nes文件中)并在VirtualNES模拟器中成功加载。

代码语言:javascript
复制
#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更多的内存。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-25 15:49:50

您不检查a的值。(顺便问一句,你为什么要抛出返回值?)

我想是NULL吧。因此,对a[0]的写访问是无效的C,但是它可能(取决于体系结构)仍然有效-并在那里造成破坏和中断。

编译过程按预期工作,因为对于编译器和链接器来说,malloc()与其他函数一样是一个函数。错误只发生在运行时。

票数 3
EN

Stack Overflow用户

发布于 2013-11-25 15:59:44

分段故障是现代神奇的福音;它们代表着我们的计算机,实时地自我诊断自己的错误。

相比之下,在过去,很少有办法让计算机“崩溃”,也就是说,计算机会意识到某些东西出了问题,而导致它做了其他的事情。在这里,您已经将1写到内存中的某个地方(很可能覆盖了一些重要的东西!),然后计算机继续运行。

需要注意的是:在旧的架构和嵌入式系统中,“不崩溃”是一个很低的清除栏,并不表示一切正常。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20197215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档