我正在嘗試編寫一個程序,該程序顯示分配給靜態,堆棧或堆內存的連續變量的地址。靜態,堆棧和堆內存分配的地址排序?
這裏是我的代碼:
#include <iostream>
void stack_f() {
// array on stack
char stack_arr[3] = {'a', 'b', 'c'};
// stack memory addresses
std::cout <<"\nStack memory addresses.\n";
for (size_t i = 0; i < 3; ++i) std::cout <<"&stack_arr["<< i <<"] "
<< reinterpret_cast<void*>(&stack_arr[i]) <<'\n';
}
//================================================================================
int main() {
// array on static storage
static char global_arr[3] = {'a', 'b', 'c'};
// array on heap
char *heap_arr = new char[3];
for (size_t i = 0; i < 3; ++i) heap_arr[i] = 'a' + i;
// Print addresses of the three arrays
// static memory addresses
std::cout <<"Static memory addresses.\n";
for (size_t i = 0; i < 3; ++i) std::cout <<"&global_arr["<< i <<"] "
<< reinterpret_cast<void*>(&global_arr[i]) <<'\n';
// stack memory addresses
stack_f();
// heap memory addresses
std::cout <<"\nHeap memory addresses.\n";
for (size_t i = 0; i < 3; ++i) std::cout <<"&heap_arr["<< i <<"] "
<< reinterpret_cast<void*>(&heap_arr[i]) <<'\n';
delete [] heap_arr;
getchar();
}
結果我得到的是:
這是不是我所期望,爲堆棧上的地址應該從大增長小。
我在這裏誤解了什麼?
1.我期待的位於靜態和堆內存從由小到大十六進制數變量的地址,而堆棧的地址以相反的順序增長。
64位Windows 7,微軟的Visual C++ 2010
'&stack_arr [0]'相當於'stack_arr + 0','&stack_arr [1]'到'stack_arr + 1';即增加地址。 (如果數組在堆棧中,則不能將其索引爲「向後」索引,如果將數組分配到別處,則「向前」) - 訪問指針的所有代碼都需要有兩個特殊情況。)如果創建兩個數組並比較數組的地址,您將看到它們如您所期望的那樣。 – molbdnilo
哪個編譯器?哪個平臺?兩者都是什麼版本?這與C++沒有太大的關係。 –