不同文件中的字符串文字是否具有相同的内存地址?

时间:2013-10-21 21:42:37

标签: objective-c c memory const string-literals

我正在使用objc_[sg]etAssociatedObject(),此函数使用内存地址作为键。如果我传递相同的字符串文字 - 例如"UIImageForTexture" - 从两个不同的文件进入函数,两个字符串文字将具有:

  1. 相同的内存地址?
  2. 不同的内存地址?
  3. 这取决于其他一些因素。
  4. 它未定义。
  5. 我可以通过将文字放在某个文件中并通过extern引用它来更明确地做到这一点,但我想知道我是否可以避免这样做。

2 个答案:

答案 0 :(得分:2)

具有相同内容的两个字符串文字(例如char *p1="abc; char *p2="abc";)是否具有相同的地址或不同的地址是实现细节。 p1p2可能相等或不相等。 C标准不保证它们都没有。

所以答案是(3)它取决于的实现/优化。

您可以使用指向它们的指针而不是直接传递字符串文字。这样,你可以可靠地处理它们而不用担心(1)和(2)。

这可能是有意义的:Addresses of two pointers are same?

答案 1 :(得分:2)

这将是来自C99标准草案部分6.4.5 字符串文字段落 6 的实现定义行为:

  

如果这些数组的元素具有不同的数据,则未指定   适当的价值观如果程序试图修改这样的数组,则行为是   未定义。