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