在连续内存块中分配objective-c对象

在连续内存块中分配objective-c对象,objective-c,ios,memory-management,Objective C,Ios,Memory Management,我想从某个objective-c类中分配x个对象,使它们在内存中连续排列。平台是iOS 我想要解决的实际问题是如何将这些x对象存储在内存中,这样我就可以在尽可能少的缓存未命中的情况下对它们进行迭代。我想创建一个简单的c风格的objective-c对象数组,但是当我用Obj*Obj=[[object alloc]init]分配这样一个对象时并将其分配给数组中的索引,我只是存储指针,所以这显然不起作用 我怎样才能做到这一点 编辑:更多背景信息:我正在尝试将面向数据的设计应用到我的iOS游戏引擎中,我

我想从某个objective-c类中分配x个对象,使它们在内存中连续排列。平台是iOS

我想要解决的实际问题是如何将这些x对象存储在内存中,这样我就可以在尽可能少的缓存未命中的情况下对它们进行迭代。我想创建一个简单的c风格的objective-c对象数组,但是当我用
Obj*Obj=[[object alloc]init]分配这样一个对象时
并将其分配给数组中的索引,我只是存储指针,所以这显然不起作用

我怎样才能做到这一点


编辑:更多背景信息:我正在尝试将面向数据的设计应用到我的iOS游戏引擎中,我相信以这种方式在内存中布局对象将很容易提高性能(我错了吗?),因为我当前的引擎需要最小的调整。

如果你真的想这样做的话(除非你确定自己面临瓶颈,否则不要进行优化),你必须为你的类重写
+allocWithZone:
方法。我建议你阅读Mike Ash最近的精彩文章。引用其中:

Objective-C对象只是一个大小合适的内存块,第一个指针大小的内存块设置为指向对象的类。因此,自定义分配器需要返回一个指针,指向大小合适的内存块,并适当填充类


因此,您可以先分配大量内存(使用
calloc()
),然后您的
allocWithZone:
方法可以在这大块内存中的正确位置保留一个空间。

如果您真的想这样做(除非您确定面临瓶颈,否则不要进行优化),您必须重写类的
+allocWithZone:
方法。我建议您阅读Mike Ash最近的精彩文章。引用其中:

Objective-C对象只是一个大小合适的内存块,第一个指针大小的内存块设置为指向对象的类。因此,自定义分配器需要返回一个指针,指向大小合适的内存块,并适当填充类


因此,您可以分配大量内存(使用
calloc()
)首先,然后您的
allocWithZone:
方法可以在这一大块内存中的正确位置保留一个空间。

如果您担心性能,以至于需要分析缓存未命中,那么您可能最好用C编写代码,只使用最小的目标C层。但这是否必要?是否有必要您分析了您的代码并确定缓存未命中正在减慢代码的速度


如果你真的想手动分配内存,你会想签出。

如果你担心性能,以至于要分析缓存未命中,那么你最好用C编写代码,只使用一个最小的目标C层。但是这是必要的吗?你分析过你的代码并确定是C吗ache未命中会降低代码的速度吗


如果你真的需要手动分配内存,你会想退票。

< P>这听起来更像是你应该用C/C++来在游戏引擎上用Objto-C的单板在上面,以便于使用。

这是假设你已经测量了一个性能问题,它只能通过内存中的对象的连续布局来固定。

< P>这听起来更像是用C+C++来为游戏引擎提供一个Objto-C面板,使它易于使用。
也就是说,假设您已经测量了一个性能问题,而这个问题实际上只能通过内存中对象的连续布局来解决。

现在我们使用高级语言的部分原因是这样我们就不必处理这样的事情。您是否有特别的原因担心在一个Cocoa colle上的迭代中的缓存未命中Action?是的,我正在开发一款iOS游戏,我想对我的游戏引擎进行优化。是的,但是为什么?你分析过你的代码并发现这会影响性能吗?现在我们使用高级语言的部分原因是我们不必处理这样的事情。你有什么特别的原因担心吗t缓存在Cocoa集合上的迭代中未命中?是的,我正在开发一款iOS游戏,我想对我的游戏引擎进行此优化。是的,但为什么?您是否分析了代码并发现这会影响性能?