rob*_*era 2 objective-c realloc ios
当我在我的iOS应用程序中使用realloc时,它似乎总是以2的幂而不是我指定的方式增加应用程序中的内存.
当我根据其存储的对象的大小检查分配的大小时,这会导致一些问题.
这是realloc的设计方式还是我做错了什么?
typedef struct {
GLfloat r;
GLfloat g;
GLfloat b;
GLfloat a;
} Color;
typedef struct {
int objectID;
int modelID;
GLfloat scale;
GLfloat translation[3];
GLfloat rotation[3];
Color color;
bool render;
} Object;
Object* objects;
objects = realloc(objects, malloc_size(objects) + sizeof(Object));
NSLog(@"objects size = %lu", malloc_size(objects)); //prints 64 instead of 56
Run Code Online (Sandbox Code Playgroud)
这是一种效率措施.存储器分配例程使用的竞技场通常具有固定的"分辨率",例如16个字节.那是因为它们倾向于给你一个(例如)16个字节的标题,然后是足够的16个字节的块来满足你的需要.
这样,它只需要从竞技场中分配16个字节的块,这样可以更容易地拆分和重新加入这些块(每次分配最多可节省15个字节的浪费).
但是,这很重要,即使你要求10个字节并且它给你1K,你仍然只允许使用那10个字节!
如果您想跟踪您所使用的内容,那么您需要处理这个问题.不要依赖从此返回的信息malloc_size.
| 归档时间: |
|
| 查看次数: |
736 次 |
| 最近记录: |