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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3652 | 回復: 7
打印 上一主題 下一主題

變量空間是在編譯是分配的還是在運行時分配的 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2007-10-11 19:51 |只看該作者 |倒序瀏覽
#define size 1024

void fun(void)
{
        char b[size]={0};
        char bb[size]={0};
        char bbb[size]={0};
        char a[size]={0};
        char aa[size]={0};
        char aaa[size]={0};
}

int main(void)
{
        int a;
        a=0;
        fun();
        return 0;
}


比如這段代碼,是在fun()里的空間是在編譯時已經(jīng)分配好的,還是在運行到fun()時再分配的。

論壇徽章:
0
2 [報告]
發(fā)表于 2007-10-11 20:12 |只看該作者
都是auto變量嘛,當然是在運行時分配了

論壇徽章:
0
3 [報告]
發(fā)表于 2007-10-11 20:13 |只看該作者
調(diào)用時分配在棧上

論壇徽章:
0
4 [報告]
發(fā)表于 2007-10-11 20:24 |只看該作者
按LZ口吻,是編譯時,編譯器在棧上分配的

論壇徽章:
0
5 [報告]
發(fā)表于 2007-10-11 21:46 |只看該作者
原帖由 xieShell 于 2007-10-11 19:51 發(fā)表


比如這段代碼,是在fun()里的空間是在編譯時已經(jīng)分配好的,還是在運行到fun()時再分配的。

函數(shù)的?臻g大小在編譯時確定。
在運行時,程序第一次訪問棧時,會產(chǎn)生一個page fault,由內(nèi)核分配實際的內(nèi)存

論壇徽章:
0
6 [報告]
發(fā)表于 2007-10-12 01:23 |只看該作者
局部的變量,可以認為是編譯時計算好的,但是運行時才用,實際上你可以用vc的debug功能看一眼就明白了,就是個
esp - n(從此之后,這個N按理說是你需要的變量空間,但是也不一定,依賴與編譯器實現(xiàn),反正就是從棧上留一塊地,等引用那個變量的時候就用ebp + xxx)



void test()
{
00401000  push        ebp  
00401001  mov         ebp,esp
00401003  sub         esp,0Ch      //這里是分配棧空間,所謂的編譯時計算就是這個是確定的
                int x = 8;
00401006  mov         dword ptr [x],8  //這里其實是根據(jù)那個ebp地址 + 多少(依賴于你的前面那個變量大小,這個x可能地址就是ebp + 0,不過這些都根據(jù)編譯器有關(guān),所以不是那么確定的),但是匯編器可能能直接根據(jù)符號得倒地址,所以這里直接顯示 x變量名了。
                int y = 9;
0040100D  mov         dword ptr [y],9
                int z = 10;
00401014  mov         dword ptr [z],0Ah

}
0040101B  mov         esp,ebp
0040101D  pop         ebp  
0040101E  ret

[ 本帖最后由 Solidus 于 2007-10-12 01:27 編輯 ]

論壇徽章:
0
7 [報告]
發(fā)表于 2007-10-12 08:54 |只看該作者
一般的,局部變量是在運行時分配的,之所以這么說比較確切,是因為局部變量,如被調(diào)用函數(shù)中使用的變量,他們在每次調(diào)用時的地址很可能是不相同的。

而全局變量是在編譯時就決定了的,你必須告訴編譯器變量的地址。

論壇徽章:
0
8 [報告]
發(fā)表于 2007-10-13 14:24 |只看該作者
知道了,謝謝!
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP