gpt4 book ai didi

c - c中的不可变字符串的内存分配在哪里?

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

我试图了解在 C 程序中分配内存的位置。

void func1(char e, int f, int g)
{
int b = 4;
char * s = "hello world";
char * temp = (char *) malloc(15);

}

据我了解,堆栈上分配了三个自动变量 b、s 和 temp。其中b(4)的内容存放在栈中,指针s和temp存放在栈中,temp的数据存放在堆中,但是s的数据存放在哪里呢?因为当我们离开 func1 调用时 b、s 和 temp 将消失,但内容的内存已永久分配。我的其他问题是堆栈指针总是向下移动 4,就像在插入函数参数时一样,即使在一个字节的 char 的情况下也是如此?即使 e 只有一个字节,堆栈也会像这样吗?

30:// other stuff
26: g
22: f
18: e

http://www.firmcodes.com/wp-content/uploads/2014/08/memory.png这不是 c 程序的布局吗?

最佳答案

这取决于您的平台,并且是实现定义的。一般情况下,如果您的系统可用,它会进入只读内存。阅读更多 here .

正如您所指出的,当函数终止时,自动变量将消失,从而导致内存泄漏,但仅适用于您动态分配内存的情况!

这意味着您必须让 func1() 与其调用者(例如 main())通信 temp,这样您就可以稍后 free() 它。或者,如果您在函数完成其工作后不需要它,则在退出函数之前 free() 它。


顺便说一下,正如 iharob 所说:Do I cast the result of malloc? NO!


至于你的另一个问题,应该是一个新问题,阅读thisthis ,他们可能会有所帮助。

关于c - c中的不可变字符串的内存分配在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39153686/

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