.comm对齐在C程序的汇编代码中意味着什么

时间:2012-10-15 05:31:27

标签: memory-management assembly gnu

我有这个C程序。

#include<stdio.h>

char arr[65];
int main()
{
    return 0;
}

当我使用gcc上的linux使用以下命令编译它时:

gcc -Wall -save-temps arrNewGlobal.c -o arnewGlobal

我得到以下汇编代码。

.file   "arrglobal.c"
.comm   arr,65,32 
.text
.globl  main
.type   main, @function
    .......... 

根据as文档,.comm分配了未初始化的大小为65的内存块,对齐为32位(这意味着地址将具有5个最低有效值等于零)

我不明白的是,这个地址是否意味着该存储器块的起始地址,或者该存储器的每个字节应该具有5个最低有效位等于零的地址(就像每个字节地址跳转一样)

另外只是为了确保,这个地址不是物理地址,而是虚拟地址?

2 个答案:

答案 0 :(得分:1)

  

.comm名称,大小,对齐

' .comm '指令在数据部分中分配存储空间。存储由标识符名称引用。 大小以字节为单位,必须为正整数。名称无法预定义。 对齐是可选的。如果指定了alignment,则name的地址与alignment的倍数对齐。

是的,地址是虚拟地址。您的分页机制负责将其映射到物理地址,就像在任何其他情况下一样。

答案 1 :(得分:0)

该代码意味着65字节对齐到32字节/位(4字节)(我不知道,老实说),但这绝不意味着每个字节应该在5 ls位清零的地址。试想一下 - 虽然这个数组不是一个数组 - 它在内存中不会是连续的。 你的意思是说“物理”和“虚拟”地址是什么意思?