我试图了解在 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!
关于c - c中的不可变字符串的内存分配在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39153686/