【问题标题】:Do string literals in different files have the same memory address?不同文件中的字符串文字是否具有相同的内存地址?
【发布时间】:2013-10-21 21:42:36
【问题描述】:

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

  1. 内存地址相同?
  2. 不同的内存地址?
  3. 这取决于其他一些因素。
  4. 未定义。

我可以通过将文字粘贴在某个文件中的某个位置并通过extern 引用它来更明确地做到这一点,但我想知道我是否可以避免这样做。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 好的,看来我必须以正确的方式进行操作,因为即使在同一个文件中也不能保证。
    【解决方案2】:

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

    所以答案是 (3) 这取决于实施/优化。

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

    这可能会引起您的兴趣:Addresses of two pointers are same?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 2021-07-15
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      相关资源
      最近更新 更多