衆所周知,c程序的運行時,內存分爲以下幾個段:
- 代碼段(Text segment )
- 數據段(Initialized data segment)
- BSS段(Uninitialized data segment)
- 棧(stack)
- 堆(heap)
教科書上說,棧是由高地址向低地址增長,那麼如何驗證呢?
我們知道,函數中直接定義的變量是在棧(stack)上的,那麼我們只需要先後定義兩個變量,然後比較它們的地址大小就能夠知道棧是否爲高地址像低地址增長了。
代碼如下:
#include<stdio.h>
int main()
{
int a;
int b;
printf("%d\n%d\n",&a,&b);
return 0;
}
我的機器的運行結果爲:
6356748
6356744
在程序中應該是a先入棧,然後b在入棧,因爲這裏b的地址比a的小,說明了棧的增長是由高地址向低地址增長的!