[英]Address ordering in static, stack and heap memory allocation?
我正在嘗試編寫一個程序,顯示在靜態,堆棧或堆內存上分配的連續變量的地址。
這是我的代碼:
#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 ,因為堆棧上的地址應該從大到小。
我在這里誤解了什么?
1.我期望位於靜態和堆內存中的變量地址從小到大的十六進制數增長,而堆棧的地址以相反的順序增長。
64位Windows 7,Microsoft Visual C ++ 2010
你誤解的只是當堆棧在x86,x86-64和許多其他現代處理器上向下增長時,數組被分配為單個塊,因此增加索引會增加地址。 一旦記住這一點,您的結果就是人們所期望的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.