亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: C語言中全局變量,局部變量賦值民否對(duì)編譯可執(zhí)行文件大小的影響! [打印本頁]

作者: cgmeco    時(shí)間: 2010-12-21 23:19
標(biāo)題: C語言中全局變量,局部變量賦值民否對(duì)編譯可執(zhí)行文件大小的影響!
8、        全局變量a賦初值5和不賦值兩種情況,對(duì)生成的可執(zhí)行文件大小有什么影響?假如是函數(shù)內(nèi)的局部變量b呢?為什么?

遇到這樣一個(gè)問題,全局變量,賦值與否對(duì)編譯后的可執(zhí)行文件大小影響為4個(gè)beta。

而局部變量賦值與否對(duì)編譯后的可執(zhí)行文件大小影響為16個(gè)beta。

為什么,一直沒有想明白,

請(qǐng)高手解答!
作者: sagasw    時(shí)間: 2010-12-21 23:33
depend on
作者: cgmeco    時(shí)間: 2010-12-21 23:39
depend on
sagasw 發(fā)表于 2010-12-21 23:33



   什么意思?能不能詳細(xì)說明一下!

謝謝!
作者: sagasw    時(shí)間: 2010-12-22 00:45
各種編譯器編譯選項(xiàng)、優(yōu)化選項(xiàng),以及你所鏈接的靜態(tài)庫(kù)都會(huì)影響文件的大小。
而且,沒有人關(guān)心變量與可執(zhí)行文件大小之間的關(guān)系,基本上不搭邊。

如果你關(guān)心可執(zhí)行文件大小,可以通過調(diào)整編譯選項(xiàng),壓縮可執(zhí)行文件來完成。

如果說少寫幾個(gè)變量就能省了文件大小,那我很佩服提出這個(gè)想法的仁兄,太牛!
作者: OwnWaterloo    時(shí)間: 2010-12-22 01:23
標(biāo)題: 全局變量
作一些限制:

1. 全局變量類型為int
2. sizeof(int)==4
3. elf格式

int v = x;
只要x不為0, v就會(huì)在.data段里占據(jù)4字節(jié)空間, 內(nèi)容是x。
x等于0, 或者沒有賦初始值; v就不在.data段, 而是.bss段。

.bss段的內(nèi)容在文件映像中不實(shí)際存在, 文件映像中只保留它的總大小。

全局變量不賦初值, 節(jié)省的就是這4bytes。
作者: OwnWaterloo    時(shí)間: 2010-12-22 01:28
標(biāo)題: 局部變量
限制如上。

初始化工作需要一些指令去完成, 會(huì)增加.text段的大小。

4bytes, 16bytes, 說得也太絕對(duì)了。
而且這些段并不是實(shí)際使用多少就占用多少, 會(huì)有填充的。

要么lz題目沒抄完整, 要么出題人就是林銳那種半罐水不懂裝懂的。
作者: cgmeco    時(shí)間: 2010-12-22 02:32
呵呵,這是一個(gè)公司的面試題里面的!

別人給我的,可能是沒有給我全吧,

既然別人問起來了,我就搞清楚一下!

謝謝各位大俠了!
作者: veking    時(shí)間: 2010-12-22 09:17
建議看下《程序員的自我修養(yǎng)》,你就全明白了。
作者: jhui66    時(shí)間: 2010-12-22 09:30
5樓說的很對(duì),全局的變量在賦非零初值與否的主要是data段與bss段的不同
作者: chinesedragon    時(shí)間: 2010-12-22 10:36
應(yīng)該和運(yùn)行時(shí)占內(nèi)存大小  有關(guān)
作者: starzhestarzhe    時(shí)間: 2010-12-22 11:01
8、        全局變量a賦初值5和不賦值兩種情況,對(duì)生成的可執(zhí)行文件大小有什么影響?假如是函數(shù)內(nèi)的局部變量b呢?為 ...
cgmeco 發(fā)表于 2010-12-21 23:19



    敢問lz,4個(gè)beta是啥?
作者: zhousiyv    時(shí)間: 2010-12-22 11:17
再小的程序裝載后也要一頁內(nèi)存吧,我猜
文件系統(tǒng)里小文件倒是可以壓縮存放
作者: sparkzh    時(shí)間: 2010-12-22 11:25
只有注釋語句才不會(huì)影響可執(zhí)行文件的大小
作者: finalday1982    時(shí)間: 2010-12-22 13:26
建議看下《程序員的自我修養(yǎng)》,你就全明白了。
veking 發(fā)表于 2010-12-22 09:17

頂這個(gè)。
另外,這個(gè)問題對(duì)于軟件開發(fā)壓根不重要,面試出這種題實(shí)在@@##。
作者: bangziFnst    時(shí)間: 2010-12-22 14:40
一個(gè)程序員的自我修養(yǎng)——鏈接 裝載與庫(kù)
值得一看
對(duì)于你的問題:
初始化了的全局(靜態(tài))變量是放在.data section的
沒有初始化的是放在.bss section
而.bss section是虛擬的 也就是說在ELF格式的目標(biāo)文件中是不存在的
你可以通過
readelf -s xxx.o 看一下 VMA和PMA與別人的是重疊的
所以加不加初始化了的全局變量可執(zhí)行文件會(huì)變化
p.s:對(duì)于初始化為0的全局變量一樣是放在.bss section的 這樣可以節(jié)省磁盤空間
作者: rubylc_unix    時(shí)間: 2010-12-22 14:46
建議看下《程序員的自我修養(yǎng)》,你就全明白了。
veking 發(fā)表于 2010-12-22 09:17



    貌似很火的一本書,大家都可以看看。里面把編譯和鏈接講得蠻清楚的,這書估計(jì)參考了以前的《編譯器和連接器》




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2