變量如何在內存中找到?我有這樣的代碼c變量在內存中的分配,指針
int w=1;
int x=1;
int y=1;
int z=1;
int main(int argc, char** argv) {
printf("\n w %d",&w);
printf("\n x %d",&x);
printf("\n y %d",&y);
printf("\n z %d",&z);
return (EXIT_SUCCESS);
}
,並打印此
w 134520852
x 134520856
y 134520860
z 134520864
我們可以看到,其他時候整數聲明和分配,地址是移動四個位置(字節,我想,它似乎很邏輯) 。但是,如果我們不給變量賦值,例如下面的代碼:
int w;
int x;
int y;
int z;
int main(int argc, char** argv) {
printf("\n w %d",&w);
printf("\n x %d",&x);
printf("\n y %d",&y);
printf("\n z %d",&z);
return (EXIT_SUCCESS);
}
它打印此
w 134520868
x 134520864
y 134520872
z 134520860
我們可以看到有地址之間的四個位置,但他們不是爲了。爲什麼是這樣?在這種情況下,編譯器如何工作?
如果你想知道我爲什麼問這個,是因爲我開始學習一些安全,我想了解一些攻擊,例如,如何溢出攻擊整數工作,我我一直玩C指針來修改其他變量,通過添加更多的位置比變量的大小和類似的東西。
使用%p作爲地址。第二個例子中的變量將自動分配0值。 –
在搜索框中尋找'bss'。區別在於數據段中的初始化數據和BSS中的未初始化數據(由符號開始的塊),該段保存零初始化數據。例如[爲什麼需要BSS段?](http://stackoverflow.com/questions/9535250/why-is-the-bss-segment-required) –
編譯器會在所選的任何位置分配變量。 –