NSObject 内存占用大揭秘:仅需 8 字节?
2023-11-25 06:35:48
在 Objective-C 中,NSObject 作为所有对象的基类,扮演着至关重要的角色。然而,围绕它的内存占用却存在着一些令人困惑的迷思。本文将深入探究 NSObject 的内存占用,揭开它背后的秘密。
辟谣:NSObject 占用 16 字节内存
过去曾广泛流传一种说法,声称 NSObject 对象在内存中占据 16 个字节。这一说法源于使用 malloc_size() 函数测量分配给 NSObject 对象的内存大小。然而,此方法存在误导性,因为它无法区分实际使用的内存和保留用于未来扩展的额外空间。
真相:NSObject 仅占用 8 字节内存
实际上,NSObject 对象的内部数据结构仅占用 8 个字节。这可以通过查看 NSObject 的实现来验证:
@interface NSObject {
Class isa;
}
isa
指针是一个 8 字节的指针,指向对象的类。由于 NSObject 没有其他实例变量,因此它的内部数据结构大小为 8 字节。
额外 8 字节的用途
尽管 NSObject 本身只占用 8 字节,但系统分配了 16 个字节的内存。这额外的 8 字节用于以下目的:
- 对齐: 内存分配器通常要求分配的内存与特定边界对齐。这在多线程环境中尤其重要,以避免缓存行冲突。
- 扩展: 未来版本的 NSObject 可能会添加额外的实例变量。预先分配额外的内存空间允许轻松扩展,而无需重新分配。
结论
Contrary to popular belief, NSObject objects occupy only 8 bytes of memory internally. The additional 8 bytes are allocated for alignment and potential future expansion. Understanding this distinction is crucial for optimizing memory usage in Objective-C applications.