gpt4 book ai didi

c++ - c程序内存布局,关于局部变量和全局变量的位置

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:56 25 4
gpt4 key购买 nike

一些书籍和网页告诉我有关C程序内存布局的知识。比如栈比堆高,全局变量比栈低。但我发现这不是真的:

D:\code>输入teSTLayout.cpp

#include <stdio.h>

int g;


int main()
{
int loc = 0;
printf("%p %p\n", &g, &loc);
}

D:\code>cl teSTLayout.cpp

Microsoft (R) C/C++ Optimizing Compiler Version 17.00.61030 for x64
Copyright (C) Microsoft Corporation. All rights reserved.

testlayout.cpp
Microsoft (R) Incremental Linker Version 11.00.61030.0
Copyright (C) Microsoft Corporation. All rights reserved.

/out:testlayout.exe
testlayout.obj

D:\code>teSTLayout.exe

000000013F2222C0 000000000022FB20

D:\code>

谁能解释为什么全局变量的地址比局部变量的地址大。

最佳答案

c(或c++)程序的内存布局不是由c(或c++)标准定义的。你的书是出于无知而撒谎,或者他们实际上已经说过这是一个典型的内存布局或一个布局,它适用于一个特定的编译器在< em>一个特定的 平台,不一定与您的平台相同。由于未定义布局,不同平台上的不同编译器可以使用他们认为实用的任何内存布局。

你的程序是 c++ 而不是 c,所以如果这样的布局是为 c 定义的,它不一定适用于你的程序。

关于c++ - c程序内存布局,关于局部变量和全局变量的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30884991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com