簡體   English   中英

靜態,堆棧和堆內存分配中的地址排序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM