A O*_*A O 4 cocoa objective-c memory-address
每当我在我的Cocoa应用程序中查看内存地址时,我会注意到(通常)3个主要类别的地址
0x00006xxxxxxx 0x00007fffxxxx 0x0000001xxxxx我知道什么是什么 - 就像我注意到0x00006xxxxxxx地址似乎是我应用程序对象的指针?
并且0x0000001xxxxx似乎是内存中实际对象的地址?
但我真的不确定任何事情,我无法形成一个好的谷歌查询给我一个答案.
有没有人有资源,或者知道如何识别Cocoa应用程序中的地址类别?
有没有人有资源,或者知道如何识别Cocoa应用程序中的地址类别?
地址本身不属于类别 - 地址是地址.但确实存在用于不同事物的不同内存区域,尤其是堆栈和堆.在包含MacOS的许多系统上,堆从相对较低的地址开始并向上增长(地址增加),而堆栈从高地址开始并向下增长.
Objective-C对象总是在堆上分配并通过指针访问,因此有意义的是对象本身的地址具有低地址,而指向对象的指针(通常是存储在堆栈中的全局变量或局部变量)具有高地址.全局变量存在于堆栈的基础上,因此它们将具有比局部变量更高的地址(同样,堆栈向下增长).
尽管如此,不要假设地址表示存储在该位置的物品的类型.虽然通常你不会在堆栈上找到Objective-C对象,但你肯定会在堆中的地址处找到大量的对象指针,因为对象包含指向其他对象的指针.还有,可能会发现其它类型的数据的块:原始数据类型(int,char等),C语言风格的阵列,数据缓冲器,块等
我可能会遗漏一些其他区域,例如代码段的空间,但这是一般的想法.了解内存的组织方式通常很有帮助,但与此同时,除非您编写需要它的软件(例如调试器),否则应避免编写依赖于该知识的代码.
如果你想了解更多,你可以从Mike Ash的几篇博客文章开始:
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |