此語句是否會失敗?Objective-C中的存儲分配
if (@"Hello") foo();
?
換句話說,在編譯器無法爲文本分配足夠的存儲空間時會出現這種情況。我知道這聽起來對於短文字很荒謬,但真的很長。
此語句是否會失敗?Objective-C中的存儲分配
if (@"Hello") foo();
?
換句話說,在編譯器無法爲文本分配足夠的存儲空間時會出現這種情況。我知道這聽起來對於短文字很荒謬,但真的很長。
號
NSString的文字被「分配」在編譯時和你的程序的文本段的一部分。
編輯
要回答這個問題的另一部分,如果編譯器不能爲字面分配足夠的內存,if語句不會失敗,但是編譯會。
我不知道有效的上限字符串文本的長度是多少,但它勢必會小於NSIntegerMax
unichars
因爲NSNotFound
被定義爲NSIntegerMax
。根據clang docs,字符串文字的字節長度爲unsigned int
,NSString字符串文字是unichars
的序列。
我敢肯定,如果你嘗試編譯文件與文字
@" ... 1TB worth of characters ... "
編譯器將失敗。 C標準available here表示任何兼容的編譯器需要支持每個字符串文字至少4095個字符等。請參見第5.2.4.1節。我相信GCC和clang允許更大的文字。
是4095的上限或下限? – shreyasva 2010-12-15 07:41:32
對不起,我忘了添加「至少」。請自己閱讀標準!我鏈接到真正的文檔,以便您可以閱讀它: – Yuji 2010-12-15 08:42:53