Objective-C中的存储分配

Objective-C中的存储分配,objective-c,Objective C,这句话会失败吗 if(@“Hello”)foo() 换句话说,编译器中可能存在无法为文本分配足够存储空间的情况。我知道这对于短长度的文本来说听起来很可笑,但对于真正长的文本呢。我很确定,如果您试图编译一个具有该文本的文件 @" ... 1TB worth of characters ... " 编译器将失败。C标准规定,任何兼容的编译器都需要支持每个字符串文本至少4095个字符,等等。请参见第5.2.4.1节。我确信GCC和clang允许更大的文本。如果您试图编译一个带有文本的文件,我非常确定

这句话会失败吗

if(@“Hello”)foo()


换句话说,编译器中可能存在无法为文本分配足够存储空间的情况。我知道这对于短长度的文本来说听起来很可笑,但对于真正长的文本呢。

我很确定,如果您试图编译一个具有该文本的文件

@" ... 1TB worth of characters ... "

编译器将失败。C标准规定,任何兼容的编译器都需要支持每个字符串文本至少4095个字符,等等。请参见第5.2.4.1节。我确信GCC和clang允许更大的文本。

如果您试图编译一个带有文本的文件,我非常确定

@" ... 1TB worth of characters ... "
编译器将失败。C标准规定,任何兼容的编译器都需要支持每个字符串文本至少4095个字符,等等。请参见第5.2.4.1节。我确信GCC和clang允许更大的文本。

NSString文本在编译时“分配”,并构成程序文本段的一部分

编辑

为了回答问题的另一部分,如果编译器未能为文本分配足够的内存,if语句不会失败,但编译会失败

我不知道字符串文字长度的有效上限是多少,但它肯定小于
NSIntegerMax
unichars
,因为
NSNotFound
被定义为
NSIntegerMax
。根据,字符串文本的字节长度是
无符号整数
,而NSString字符串文本是
unichars
的序列

没有

NSString文本在编译时“分配”,并构成程序文本段的一部分

编辑

为了回答问题的另一部分,如果编译器未能为文本分配足够的内存,if语句不会失败,但编译会失败


我不知道字符串文字长度的有效上限是多少,但它肯定小于
NSIntegerMax
unichars
,因为
NSNotFound
被定义为
NSIntegerMax
。根据,字符串文本的字节长度是
无符号整数
,而NSString字符串文本是
unichars
的序列

4095是上限还是下限?对不起,我忘了加上“至少”。请自己阅读标准!我链接到了真实的文档以便您可以阅读:pis 4095上限还是下限?对不起,我忘了添加“至少”。请自己阅读标准!我链接到真实的文档以便您可以阅读:p