保留的是您当前所在部分的空间。这通常是该.bss
部分(如果您在发布section .bss
之前发布resb
),但可以是您喜欢的任何其他部分。它应该是未初始化的数据部分,否则您可能会收到警告。
有时使用的一个特殊部分resb
是绝对部分。 这是一个伪段,用于定义具有绝对值的符号,例如用于定义使用该struc ... endstruc
机制的结构。
所有其他部分都是地址空间的区域。它们的最终位置(以及它们是否在程序运行时最终位于程序的地址空间中)取决于链接器。通常,该.bss
部分被放置在程序地址空间的某个区域中,该区域可能由(或映射为由)实际 RAM 支持。具体取决于您要为其组装和运行该程序的系统。
请注意,CPU 缓存在很大程度上对程序是透明的。您不能“在缓存中分配数据”,并且缓存没有与之关联的地址空间。
最后,在托管环境中,通常无法确定数据是否最终会出现在 RAM 中。这是因为进程受内存映射的影响,其中进程的虚拟地址空间以某种方式映射到系统物理地址空间。此映射是按需执行的,除非您实际访问地址空间区域,否则它可能根本没有映射到任何内容。即使在您访问它之后,CPU 可能会在将数据刷新到 RAM 之前缓存访问一段时间。即使数据在RAM在某个时间点,操作系统可以决定页出(或换出)的过程到磁盘上,如果内存资源紧张。当然,所有这些对您的程序都是透明的,您无需关心。
你不应该想太多。重要的是,这个地址空间区域的行为就像可读和可写的内存。