2010-01-26 4 views
3

Parfois, le projet compile, et parfois il échoue avecXcode iPhone Construire échoue avec Mémoire saturée

« Mémoire insuffisante allocation 4072 octets après un total de 0 octets »

Si le projet ne compile, lorsque il démarre immédiatement une exception d'accès incorrect lors de la tentative d'accès au premier objet (alloué et conservé) ou renvoie une erreur "impossible d'accéder à l'adresse mémoire xxxxxxxx", où xxxxxxxx est une adresse mémoire valide.

Est-ce que quelqu'un a vu des symptômes similaires et connaît des solutions de contournement?

Merci d'avance.

Répondre

2

Si la compilation ou la liaison échoue avec une erreur de mémoire insuffisante, c'est probablement l'un des deux problèmes.

D'abord, votre lecteur de démarrage ou le lecteur sur lequel vous construisez votre source dispose-t-il d'un espace libre (il peut s'agir du même lecteur)? Si ce n'est pas le cas, cette erreur peut survenir lorsque le sous-système VM essaie de mapper dans un fichier ou, plus probablement si le disque de démarrage est plein, le sous-système VM essaie d'allouer plus de disque pour l'espace de swap.

Deuxièmement, votre application est-elle absolument gigantesque? C'est à dire. est-ce le linker qui échoue en essayant d'assembler quelque chose de vraiment très grand?

Il y a également la possibilité que le système ait de la mauvaise RAM. Peu probable, cependant, étant donné que les symptômes sont si cohérents.

Dans tous les cas, sans plus de détails, il est difficile de donner une réponse plus spécifique.

+0

Merci bbum. Voici ce que nous avons découvert jusqu'à présent: 1) Il y a une limite supérieure à la taille de chaque bloc {...}. Notre application a dépassé cela. La décomposer en plus petits blocs a partiellement résolu ce problème. 2) Il existe une limite supérieure que le compilateur peut gérer pour compiler du code dans une même classe. Cette limite semble être liée à la quantité de mémoire système (plate-forme de développement) disponible. Nous avons établi cela en coupant progressivement de gros morceaux de code et en commentant tout ce qui y avait accès. – McPragma

+0

Habituellement pas facile, mais heureusement notre architecture d'application supporte cela. 3) Par conséquent, nous avons divisé les classes d'application en classes plus petites. L'application compile et exécute une version de débogage. Cependant, il ne compilera pas une version release, avec le compilateur délivrant des messages comme Mémoire insuffisante allouant 1435327816 octets après un total de 0 octets L'étape suivante consistera à compiler chaque classe individuellement. Juste signalé que cela ne fonctionne pas. C'est ridicule. Code qui serait compilé quand une partie d'un morceau plus gros ne compilerait pas en tant que petit morceau seul. Ce n'est pas amusant – McPragma

+0

BBum ... désolé ... négligée pour répondre à vos questions. Boot drive a d'énormes quantités d'espace libre. Application pas gigantesque ... nous avons fait plus grand. Mauvaise RAM une possibilité, mais pas d'autres symptômes dans d'autres applications. Merci encore. – McPragma

0

Je l'ai vu, il est généralement pas une erreur de mémoire réelle ... (de votre code)

ce qui se passe est que vous avez vos cibles Xcode paramètres de construction « niveau d'optimisation » sur Rapide, ou plus rapide ou plus rapide ..

il semble y avoir un bug quelque part, réglez-le pas, ou essayez les Os, ou O3 (je ne pense pas que le plus rapide a lieu) ..

cette va très probablement résoudre le problème de quelqu'un qui traverse ce fil. pour sûr, essayez d'abord "none" ... cela confirmera que c'est ce qui se passe dans le cas de quelqu'un qui voit cela ...

Je peux dire que McPragma a ce problème à coup sûr, parce qu'il décrit changer de déboguer à libérer, et cela le provoque (le débogage est déjà défini sur aucun) et la version est définie sur autre chose ... quand c'est le cas ... pour sûr c'est ce paramètre de construction particulier ...

Questions connexes