realloc仅以2的幂增加分配

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)

pax*_*blo 5

这是一种效率措施.存储器分配例程使用的竞技场通常具有固定的"分辨率",例如16个字节.那是因为它们倾向于给你一个(例如)16个字节的标题,然后是足够的16个字节的块来满足你的需要.

这样,它只需要从竞技场中分配16个字节的块,这样可以更容易地拆分和重新加入这些块(每次分配最多可节省15个字节的浪费).

但是,这很重要,即使你要求10个字节并且它给你1K,你仍然只允许使用那10个字节!

如果您想跟踪您所使用的内容,那么您需要处理这个问题.不要依赖从此返回的信息malloc_size.