同一字符串的多个#定义是否使用相同的常量字符串

Does multiple #define of the same string use the same constant string?

本文关键字:字符串 常量 是否 定义      更新时间:2023-10-16

同一字符串的多个#定义是否使用相同的常量字符串?假设我在多个地方执行以下操作:

#define TEST @"test"

编译器足够聪明,知道它引用了数据段中的同一个常量字符串,对吧?

确实,您的问题与#define的作用无关,而是与编译器如何处理字符串文字有关。编译器将字符串对象插入到程序映像中,该映像是只读的,不实现保留计数。这是一个优化,因此不需要在运行时创建字符串。

通常,编译器足够聪明,可以识别出您使用的是相同的字符串文字,并且会使用相同的常量字符串,但它不会在堆中。

还要检查这个问题:ObjectiveC字符串文字的权威描述?

编译器执行一种称为字符串内部处理的操作。这不是一个必要的操作,所以如果您的代码依赖于test位于同一地址,那么您可能会遇到一些问题。在大多数情况下,是的,它将尝试重用相同的字符串,并使它们都指向同一个字符串(在只读内存中)。