1

我尝试了以下方法:

int main()
{
    char* a = "sdwgfwegwe wefwef wefwefwefwysadqaw";
    char* b = "acd";
    char* c = "sdwgfwegwe wefwef wefwefwefwysadqaw";
    char* d;

    d = "acd";

    printf("%p\n", a);
    printf("%p\n", b);
    printf("%p\n", c);
    printf("%p\n", d);

    getchar();

    return 0;
}

并且在输出(控制台)上,a 和 c 以及 b 和 d 具有相同的地址。我想过为每个角色实现一个查找表。这样做有什么好处/情况吗?以及编译器从中得到了什么(上面的示例,而不是查找表:))?检查这个字符串是否已经被使用,如果没有,为给定的字符串保留内存 -> 将它返回给 a? 有没有人有一些书籍提示或链接,可以深入解释内部内存分配/管理,即使它依赖于编译器?提前致谢。

4

2 回答 2

7

字符串文字在 C 中被指定为不可修改。

并且来自 C99 基本原理文档

“该规范允许实现共享具有相同文本的字符串副本,将字符串文字放置在只读内存中,并执行某些优化”

于 2013-01-22T21:39:40.447 回答
2

C++ 答案(第 2.14.5 节):

是否所有字符串文字都是不同的(即,存储在不重叠的对象中)是实现定义的。

如何决定创建字符串文字对象完全取决于实现。一种实现方式可能与另一种实现方式不同。您的似乎将相同的字符串文字视为相同的对象。

于 2013-01-22T21:43:23.627 回答