我想从某个objective-c类中分配x个对象,使它们在内存中连续布局。该平台是iOS。
我想解决的实际问题是如何将这些x对象存储在内存中,这样我就可以尽可能少地缓存它们来迭代它们。我正在考虑创建一个简单的c样式的objective-c对象数组,但是当我用Obj *obj = [[object alloc] init];
分配这样一个对象并将其分配给我的数组中的索引时,我只是存储指针,所以这显然不起作用。
我该如何做到这一点?
编辑:更多背景:我正在尝试将面向数据的设计应用到我的iOS游戏引擎中,我相信以这种方式在内存中布置对象会让我轻松获得性能(我错了吗?)作为我的当前的引擎需要进行最少的调整。答案 0 :(得分:5)
如果您真的想这样做(除非您确定自己面临瓶颈,否则不要优化),您必须覆盖您班级的+allocWithZone:
方法。我建议你阅读Mike Ash最近的精彩文章Custom Object Allocators in Objective-C。引用它:
Objective-C对象只是一块具有正确大小的内存块,并且第一个指针大小的块设置为指向对象的类。因此,自定义分配器需要返回一个指向正确大小的内存块的指针,并且该类已正确填写。
所以你可以先分配大量的内存(calloc()
)然后你的allocWithZone:
方法可以在这个大块的内存中保留一个空间,位于正确的位置。
答案 1 :(得分:1)
如果您担心性能达到分析缓存未命中的程度,那么您可能更好地在C中编写代码而只使用最小的Objective C层。但这有必要吗?您是否已分析过代码并确定缓存未命中会降低代码速度?
如果您认真考虑必须手动分配内存,则需要查看Memory Allocation Techniques。
答案 2 :(得分:1)
这听起来更像是你应该使用C / C ++作为游戏引擎,在顶部使用Objective-C的贴面使其易于使用。
也就是说,假设您已经测量了性能问题,这些问题实际上只能通过内存中对象的连续布局来解决。