gpt4 book ai didi

c++ - 如何为堆栈变量分配内存?

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:32 24 4
gpt4 key购买 nike

在 VS(发布版)上,我运行以下命令:

int main(void)
{
char b[] = "123";
char a[] = "1234567";
printf("%x %x\n", b,a);
return 0;
}

可以看出,a的mem地址是b+3(字符串的长度)。这表明内存分配没有间隙。这保证使用最少的内存。所以,我现在有点相信所有编译器都会这样做。我想在这里确定这个猜测。谁能给我更正式的证明,或者告诉我我的猜测是巧合。

最佳答案

不,不能保证总是有完美的数据打包。

比如我在g++上编译运行这段代码,相差8。

您可以阅读更多相关信息 here .

tl;dr:编译器可以将内存中的对象对齐到只能被某个常量(总是机器字长度)整除的地址以帮助处理器(对他们来说,使用这样的地址更容易)

UPD:一个关于对齐的有趣例子:

#include <iostream>
using namespace std;

struct A
{
int a;
char b;
int c;
char d;
};

struct B
{
int a;
int c;
char b;
char d;
};

int main()
{
cout << sizeof(A) << " " << sizeof(B) << "\n";
}

对我来说,它打印

16 12

关于c++ - 如何为堆栈变量分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18181502/

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