c - 字符串文字 : Where do they go?

标签 c memory string-literals

我对字符串文字的分配/存储位置感兴趣。

我确实找到了一个有趣的答案 here , 说:

Defining a string inline actually embeds the data in the program itself and cannot be changed (some compilers allow this by a smart trick, don't bother).

但是,它与 C++ 有关,更不用说它说不用打扰了。

我很烦。 =D

所以我的问题是我的字符串文字保存在哪里以及如何保存?为什么我不应该尝试改变它?实现是否因平台而异?有人愿意详细说明“聪明的把戏”吗?

最佳答案

一种常见的技术是将字符串文字放入“只读数据”部分,该部分以只读方式映射到进程空间(这就是您无法更改它的原因)。

它确实因平台而异。例如,更简单的芯片架构可能不支持只读内存段,因此数据段将是可写的。

与其尝试找出使字符串文字可变的技巧(这将高度依赖于您的平台并可能随时间变化),不如使用数组:

char foo[] = "...";

编译器会安排数组从文字中初始化,您可以修改数组。

关于c - 字符串文字 : Where do they go?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40130727/

相关文章:

c - 带直流电机/编码器的 PID 反馈和位置 Controller

c++ - 在以下情况下从套接字读取数据已损坏?

c - 访问指针 C 指向的值

linux - malloc/realloc/空闲容量优化

c - 使用strtok在c中分割一个字符串

javascript - 以字符串形式内部化字符串文字

c++ - 为什么 const char *foo = "Hello";编译但不编译 const int *foo = 5;?

memory - spark.python.worker.memory 与 spark.executor.memory 有何关系?

c++ - GCC : literal string types in a structure 中的可能错误

c - 任务比较多的线程池