char的实习工作 - 更好/等于查找

时间:2013-01-22 21:37:28

标签: c++ c lookup-tables

我尝试了以下内容:

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。 我想为每个角色实现一个查找表。 这样做有什么好处/情况吗? 编译器做了什么(上面的例子,而不是查找表:))?检查此字符串是否已被使用,如果没有,则为给定字符串保留内存 - >把它归还给? 任何人有一些书籍提示或链接,深入解释内部内存分配/管理,即使它是编译器依赖的? 提前谢谢。

2 个答案:

答案 0 :(得分:7)

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

从C99理由document

  

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

答案 1 :(得分:2)

C ++答案(§2.14.5):

  

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

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