You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

const char指针与动态内存分配所使用的内存位置是否不同?

const char*与动态分配内存的存储位置差异

是的,你给出的示例中,不同方式创建的"Paris"确实存储在不同类型的内存区域里,具体区别如下:

1. const char* city = "Paris";

这里的字符串字面量"Paris"存储在静态存储区(也常被称为字符串常量池):

  • 这块内存是程序启动时就分配好的,整个程序运行期间都存在,程序结束后由操作系统回收
  • 存储的内容是只读的,如果你尝试通过city指针修改内容(比如city[0] = 'p'),会触发未定义行为
  • 注意:city这个指针变量本身如果是局部变量的话,是存在栈上的,但它指向的字符串内容在静态存储区

2. char city[6] = "Paris";

这个数组存储在栈上(如果是局部变量的情况):

  • 栈内存是自动管理的,当变量所在的作用域结束时,内存会被自动释放
  • 数组里的内容是"Paris"的副本,是可修改的(比如city[0] = 'p'是合法操作)

3. char* c = new char[strlen(city) + 1];

通过new动态分配的内存位于堆上:

  • 堆内存需要程序员手动管理,必须通过delete[] c;来释放,否则会造成内存泄漏
  • 这块内存是程序运行时动态申请的,大小可以在运行时决定,灵活性更高

内容的提问来源于stack exchange,提问作者Himawari.Ksm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:29:56