2010-12-15 26 views
1

Cette instruction peut-elle échouer?Allocation de stockage dans Objective-C

if (@"Hello") foo();? En d'autres termes, peut-il y avoir une situation dans laquelle le compilateur ne parvient pas à allouer suffisamment d'espace de stockage pour les littéraux. Je sais que cela semble ridicule pour les littéraux de courte durée, mais qu'en est-il des plus longs?

Répondre

3

n °

littérales NSString.

Modifier

Pour répondre à l'autre partie de la question, si le compilateur ne parvient pas à allouer suffisamment de mémoire pour le littéral, l'instruction if ne manquera pas, mais la compilation.

Je ne sais pas ce que la limite supérieure effective à la longueur d'une chaîne littérale est, mais il est lié à être inférieur à NSIntegerMaxunichars parce NSNotFound est défini comme NSIntegerMax. Selon le clang docs, la longueur en octets d'un littéral de chaîne est un unsigned int et les littéraux de chaîne NSString sont des séquences de unichars.

1

Je suis sûr que si vous essayez de compiler un fichier avec le littéral

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

le compilateur échouera. La norme C available here indique que tout compilateur compatible doit prendre en charge au moins 4095 caractères par chaîne littérale, etc. Voir la section 5.2.4.1. Je suis sûr que GCC et clang permettent des littéraux beaucoup plus gros. sont « attribués » au moment de la compilation et font partie du segment de texte de votre programme

+0

est 4095 une limite supérieure ou une limite inférieure? – shreyasva

+0

Désolé, j'ai oublié d'ajouter "au moins". S'il vous plaît lire la norme vous-même! Je suis lié au vrai document pour que vous puissiez le lire: p – Yuji