2010-12-15 34 views
1

此語句是否會失敗?Objective-C中的存儲分配

if (@"Hello") foo();

換句話說,在編譯器無法爲文本分配足夠的存儲空間時會出現這種情況。我知道這聽起來對於短文字很荒謬,但真的很長。

回答

3

NSString的文字被「分配」在編譯時和你的程序的文本段的一部分。

編輯

要回答這個問題的另一部分,如果編譯器不能爲字面分配足夠的內存,if語句不會失敗,但是編譯會。

我不知道有效的上限字符串文本的長度是多少,但它勢必會小於NSIntegerMaxunichars因爲NSNotFound被定義爲NSIntegerMax。根據clang docs,字符串文字的字節長度爲unsigned int,NSString字符串文字是unichars的序列。

1

我敢肯定,如果你嘗試編譯文件與文字

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

編譯器將失敗。 C標準available here表示任何兼容的編譯器需要支持每個字符串文字至少4095個字符等。請參見第5.2.4.1節。我相信GCC和clang允許更大的文字。

+0

是4095的上限或下限? – shreyasva 2010-12-15 07:41:32

+0

對不起,我忘了添加「至少」。請自己閱讀標準!我鏈接到真正的文檔,以便您可以閱讀它: – Yuji 2010-12-15 08:42:53