- (void)viewDidLoad {
[super viewDidLoad];
// 分配内存操作
Person * p1 = [Person alloc];
// init 操作,
// 并没有对分配的内存空间,做任何的修改 / 处理
Person * p2 = [p1 init];
Person * p3 = [p1 init];
// 对象地址一样,指针指向的地址相同
// 指针自己的地址,不同
// &p1. 取 p1 指针的地址
NSLog(@"p1: %@, --- %p --- %p \n\n", p1, p1, &p1);
NSLog(@"p2: %@, --- %p --- %p \n\n", p2, p2, &p2);
NSLog(@"p3: %@, --- %p --- %p \n\n", p3, p3, &p3);
}
&p1, &p2, &p3
取到的地址,在 16 进制里面,
都只差 8 个字节
一个指针,8 个字节
因为指针本身的地址,都是在栈上,
申请空间
栈的内存空间,是连续的
栈的,内存管理方式
栈的内存空间小,不连续,就浪费
// 地址 0x7 打头,栈
// 地址 0x6 打头,堆

底层探讨的三种途径:
- 1, 符号断点
符号断点的技巧,
符号断点和普通断点,
配合起来打

先让符号断点失效,
触发普通时机的断点后,
再让符号断点生效

alloc
2, 断点操作
step into

然后,再加一个
符号断点
libobjc.A.dylib`objc_alloc:
本文通过实例探讨了Objective-C中内存分配的细节,特别是栈上p1与p2、p3之间的内存地址差异,以及如何通过符号断点和断点操作观察内存布局。着重剖析了栈与堆的内存管理原理,以及为何它们在地址上显示连续。

被折叠的 条评论
为什么被折叠?



