一直以來,在思考函數調用中,其參數,傳回位址的關系。在以前的一篇文章中,也曾看到過這種關系:
函數在堆棧中的分布情況是,位址從高到低,依次是:函數參數清單,函數傳回位址,函數執行代碼段。[1]
于是,我進行了測試。我們都知道:在函數内定義的普通變量放在棧上,而隻有用malloc,new等申請的記憶體,才放在堆上。用static辨別的變量,和全局變量一樣,放在全局存儲區。[2]
而在棧上存放的變量,一般都是按照位址從高到低的順序存放。是以,分幾步測試。用VS2005和GCC分别進行。
1)測試在棧上存放的變量,一般都是按照位址從高到低的順序存放。
用VS2005
#include "stdafx.h"
#include <stdio.h>
#include "iostream"
using namespace std;
int main()
{
int a;
int b;
cout << &a <<endl
<< &b <<endl;
}

我們可觀察到,其在棧内,兩個變量是按由高到低的順序存放的。可是,為什麼卻占用了12個位元組呢?
當我們将編譯選項由debug,變為release後,其顯示如下所示:
也就是此時,是4個位元組。我的機器是32位的。可見,顯示的不同,是由編譯選項的不一樣而引起的,這是編譯器對記憶體進行優化而得到的結果。(具體是怎麼樣一個做法,相請高人解釋)
當我們用GCC編譯器時,其結果如下所示:
由上可見,對于這個概念,是沒有什麼異議的。
參考:
[2] 變量的生存期和作用域
http://blog.163.com/zhoumhan_0351/blog/static/39954227200982104921868/