C语言结构体中字符串字面量的内存分配位置问询
字符串字面量"hello world!"的内存分配位置解析
首先明确核心要点:
malloc(sizeof *bar_ptr)仅在堆上分配了Bar结构体实例的内存空间,这个空间包含int a和char* str两个成员变量。- 代码中
bar_ptr->str = "hello world!";这一步,只是把字符串字面量的起始地址赋值给了结构体里的str指针,并没有将字符串内容拷贝到堆内存中。
字符串字面量"hello world!"实际存储在程序的只读数据段(通常标记为.rodata段),属于进程的静态内存区域:
- 这块内存是程序加载时就被分配的,生命周期贯穿整个程序运行过程,只有程序退出后才会被系统回收。
- 特别注意:字符串字面量是只读的,任何尝试修改其内容的操作都会触发未定义行为。
额外补充:你调用free(bar_ptr)释放的只是堆上的结构体空间,并不会影响"hello world!"所在的内存——因为str只是一个指向它的指针,并没有持有这块内存的所有权。
内容的提问来源于stack exchange,提问作者aledruetta
相关产品推荐
相关产品推荐

