gpt4 book ai didi

objective-c - Cocoa 应用程序中有哪些不同类型的内存地址?

转载 作者:太空狗 更新时间:2023-10-30 04:00:53 24 4
gpt4 key购买 nike

每当我在我的 Cocoa 应用程序中查看内存地址时,我注意到(通常)地址的 3 个主要类别

  • 0x00006xxxxxxx
  • 0x00007fffxxxx
  • 0x0000001xxxxx

我知道什么是什么——就像我注意到 0x00006xxxxxxx 地址似乎是指向我的应用程序对象的指针

0x0000001xxxxx 似乎是内存中实际 对象的地址?

但我真的什么都不确定,无法形成良好的 Google 查询来给我答案。

有没有人有资源,或者知道如何识别 Cocoa 应用程序中的地址类别?

最佳答案

Does anybody have a resource, or know how to identify the categories of addresses in a Cocoa application?

地址本身不属于类别——地址就是地址。但确实有不同的内存区域用于不同的事物,特别是堆栈和堆。在包括 MacOS 在内的许多系统上,堆从相对较低的地址开始并向上增长(地址增加),而堆栈从高地址开始并向下增长。

Objective-C 对象总是在堆上分配并通过指针访问,因此对象本身的地址具有低地址是有意义的,而指向对象的指针(通常是存储在堆栈中的全局或局部变量)具有高地址。全局变量存在于堆栈的底部,因此它们将比局部变量具有更高的地址(同样,堆栈向下增长)。

尽管有前一段,但不要假设地址表示存储在该位置的事物的类型。虽然您通常不会在堆栈中找到 Objective-C 对象,但您肯定会在堆中的地址处找到大量对象指针,因为对象包含指向其他对象的指针。同样,您可能会发现其他类型的数据 block :原始数据类型(intchar 等)、C 风格数组、数据缓冲区、 block 等.

可能还有一些我遗漏的区域,例如代码段的空间,但这是一般的想法。了解内存的组织方式通常很有帮助,但同时您应该避免编写依赖于这些知识的代码,除非您正在编写需要它的软件(例如调试器)。

如果您想了解更多,可以从 Mike Ash 的几篇博文开始:

关于objective-c - Cocoa 应用程序中有哪些不同类型的内存地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32890854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com