Maison > Questions et réponses > le corps du texte
大家中午好,xcode 中如何查看一个对象是在堆区还是在栈区?
黄舟2017-04-18 09:49:36
Il devrait être impossible de le voir.
Vos méthodes d'initialisation commençant par new, alloc, retention et copy se trouvent toutes dans la zone du tas, y compris les objets gérés par comptage de références.
Les constantes seront dans la zone de pile.
Simple, supprimez NSString *aString = @"aaa" 编译时会转换为常量
D'autres objets Objective-C, en théorie, se trouvent dans la zone du tas.
De plus, le bloc est également une exception. Pour des points de connaissances spécifiques, vous pouvez en apprendre davantage sur la gestion de la mémoire.
巴扎黑2017-04-18 09:49:36
Comment vérifier si un objet se trouve dans la zone de tas ou dans la zone de pile
=============================== ==
Votre question est plutôt vague. Si c'est lors de l'exécution de la méthode, le type natif (ou type valeur) défini localement. Ensuite, il doit être sur la pile. Détruit directement à la fin de l'exécution de la fonction. D'autres types de référence (ou interfaces en oc) sont créés sur le tas et ARC se charge de les nettoyer.
Je suppose que ce que vous voulez demander, c'est la classe Foo {
let a = 1
>
À ce moment-là, le champ a est-il sur la pile ou sur le tas ? Si tel est le problème, dites-vous que a est sur le tas, mais qu'il s'agit d'un type valeur.
Le type valeur n'a rien à voir avec le fait que la mémoire soit allouée sur la pile ou sur le tas, il est uniquement lié à la copie par valeur (implicitement immuable)
天蓬老师2017-04-18 09:49:36
Dans des circonstances normales, vous pouvez imprimer l'adresse pour déterminer si elle se trouve dans la mémoire du tas ou de la pile. La pile va de l'adresse haute vers le bas, et le tas va de l'adresse basse vers le haut. .... Ce genre de chose doit être le cas. Dans la pile, une chose à noter est le segment TEXT. NSString est essentiellement placé dans le segment TEXT. Cette adresse est inférieure à l'adresse du tas et est facile à distinguer ; jetez un œil à la façon dont la mémoire est divisée