gpt4 book ai didi

c - const 字符串存储在哪里?在堆栈或 .data 中?

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

<分区>

我写了一个简单的 c 代码,如下所示。在此代码片段中,我想验证常量字符串 abcd 的存储位置。我首先猜测它应该以只读方式存储在 .data 部分中。然而,在 Debian 中进行测试后,情况与我最初猜测的有所不同。通过查看gcc生成的汇编代码,发现它被放置在函数p的栈帧中。但是当我稍后在 OSX 中尝试时,字符串再次存储在 .data 部分中。现在我对此感到困惑。 const 字符串的存储有没有标准?

#include<stdio.h>
char *p()
{
char p[] = "abcd";
return p;
}

int main()
{
char *pp = p();
printf("%s\n",pp);
return 0;
}

更新:rici 的回答唤醒了我。在 OSX 中,初始字面量存储在 .data 中,然后移至函数的堆栈帧中。因此,它成为该函数的局部变量。但是,Debian 中的 gcc 处理这种情况与 OSX 不同。在 Debian 中,gcc 直接将文字存储在堆栈中,而不是从 .data 中移动它。我为我的粗心感到抱歉。

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