RAM & ROM 内存段

RAM & ROM memory segments

内存段有.bss,.text,.data,.rodata,....

我不知道它们中的哪一个位于 RAM 中,哪个位于 FLASH 存储器中,许多来源在(RAM 和 ROM)存储器的两个部分中都提到了它们。

请对 RAM 和闪存的内存段进行公平的解释。

ATMEL studio 编译器
ATMEGA 32 平台

它们位于项目的链接描述文件定义它们所在位置的任何位置。

一些目标在 ROM 中查找和执行代码,而其他目标可能在启动时将代码从 ROM 复制到 RAM 并从 RAM 执行——通常是出于性能原因在更快的处理器上。因此 .text 和 .rodata 可能位于 R/W 或 R/O 内存中。但是 .bss 和 .data 不能根据定义位于 R/O 内存中。

希望您了解这些部分名称的典型用法。 .text 是代码,.rodata 只读数据,.data 是非零 read/write 数据(例如全局变量,已在编译时初始化),.bss read/write 数据假定为零,未初始化。 (未初始化的全局变量)。

所以 .text 和 .rodata 是只读的,所以它们可以在闪存或内存中并在那里使用。 .data 和 .bss 是 read/write 所以它们需要在 ram 中使用,但是为了将这些信息放入 ram,它必须在电源关闭时位于非易失性位置,然后复制到 ram .因此,在微控制器中,.data 信息将保存在闪存中,bootstrap 代码需要将该数据复制到 ram 中代码希望找到它的位置。对于 .bss,您不需要所有这些零,您只需要起始地址和字节数,bootstrap 可以将该内存归零。

所以他们所有人 can/do 都住在这两个地方。但典型的用例是只读的在闪存中使用,而 read/write 在 ram 中使用。

ROM不能写,RAM可以写。 ROM 保存 (BIOS) 基本输入/输出系统,但 RAM 保存程序 运行 和使用的数据。 ROM 比 RAM 小得多。 ROM 是非易失性的(永久性的),但 RAM 是易失性的。