我現在正在閱讀本書的第6章專家C編程並對數據段的大小非常好奇。Mac OS可執行文件的DATA段是什麼?
我寫了3個程序來查看數據段的區別。
我的平臺是MacBook Pro,OS X 10.8,我使用命令clang xxx.c
來編譯代碼。
int main()
{
int i, j;
return 0;
}
__TEXT 4096 __DATA 0
int arr[10000];
int main()
{
int i, j;
return 0;
}
__TEXT 4096 __DATA 40960
int main()
{
int i, j;
int arr[10000];
return 0;
}
__TEXT 4096 __DATA 4096
爲什麼這三種尺寸都不相同?
你的第二段的最後兩句是完全錯誤的。 *堆棧上的緩衝區*未初始化*。即使它被置零,它也會使用(硬編碼)指令立即值,而不是數據部分中的零。 –
@JonathonReinhart:再想一想,你很可能是對的。我不得不承認,我對第三個例子的數據部分沒有把握,但大小(4096)絕對是頁面對齊效果。 – DevSolar