我有这个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个最低有效位等于零的地址(就像每个字节地址跳转一样)
另外只是为了确保,这个地址不是物理地址,而是虚拟地址?
答案 0 :(得分:1)
.comm名称,大小,对齐
' .comm '指令在数据部分中分配存储空间。存储由标识符名称引用。 大小以字节为单位,必须为正整数。名称无法预定义。 对齐是可选的。如果指定了alignment,则name的地址与alignment的倍数对齐。
是的,地址是虚拟地址。您的分页机制负责将其映射到物理地址,就像在任何其他情况下一样。
答案 1 :(得分:0)
该代码意味着65字节对齐到32字节/位(4字节)(我不知道,老实说),但这绝不意味着每个字节应该在5 ls位清零的地址。试想一下 - 虽然这个数组不是一个数组 - 它在内存中不会是连续的。 你的意思是说“物理”和“虚拟”地址是什么意思?