2012-10-15 37 views
0

我有這個C程序。在C程序的彙編代碼中,.comm對齊的含義是什麼

#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分配的具有32個比特大小對準65的存儲器未初始化塊(這意味着地址將有5至少顯著等於零)

我不理解如果這個地址意味着這塊內存的起始地址,或者這個內存的每個字節應該有5個最低有效位等於零的地址(如每個字節地址使得跳轉)

也只是爲了確認,這個地址是不是物理地址,而是一個虛擬地址?

回答

0

該代碼意味着65字節對齊到32字節/位(4字節)(老實說我不知道​​),但它絕對不意味着每個字節都應該在清除5個位的地址上。試想一下 - 這個數組不會是一個數組 - 但它不會在內存中連續。 你的意思是說「物理」和「虛擬」地址是什麼?

0

.comm名稱,大小,對準

在 '.comm' 指示分配存儲在數據段。該存儲由標識名稱引用。 大小以字節爲單位進行測量,並且必須是正整數。名稱不能被預定義。 對齊是可選的。如果指定了對齊,則名稱的地址將與多個對齊對齊。

是的地址是虛擬地址。您的分頁機制負責將其映射到物理地址,就像在其他任何情況下一樣。