如果所有代码都访问数据,所有数据访问代码,"代码"和"数据"之间有什么区别?

Les*_*ker 3 assembly

在大会上,关于内存,代码,数据,段等的理论辩论很多.

直言不讳是完全没有意义的.

什么是代码,文本,数据等?

我已经阅读了教程,他们只关注应用程序,而不是代码在100%的书面文字下做的事情.

我不能成为大会程序员,这是不清楚的; 做任何教程都能更好地澄清一下吗?

Car*_*rum 7

好吧,所以这些东西中的一些有点主观,因为它可能因系统和工具链而异,但是:

  • 代码和文本通常是同义词,意思是"此部分/段包含可执行代码"

  • 数据通常表示"此部分/段包含非可执行数据"

如果您的硬件支持它,数据部分加载到的内存页面可能会被标记为"不可执行",因此如果您的程序试图跳转到该区域,它将立即崩溃而不是做一些疯狂的事情.

同样,代码/文本部分可能将其页面标记为"只读",因此程序不会意外地修改它们.有些系统也有"只读数据"部分,它们放置字符串文字和常量变量,依此类推.

最极端的例子可能是哈佛架构,其中代码和数据存储器不是同一物理设备.