如何在堆上划分内存?

How to divide memory on the heap?

假设我在堆上分配了一大块内存。为简单起见,假设它有 512 个字节。我如何将这 512 字节的内存分成 16 个块,每个块 32 字节?

动态内存返回为 void*void* 上的算术未由标准定义,但您可以在计算单个块地址时转换为 char*。喜欢:

#define BLOCKS 16
#define BLOCK_SIZE 32

int main(void) 
{
    void * m = malloc(BLOCKS * BLOCK_SIZE);
    assert(m != NULL);
    void * dm[BLOCKS];
    for (int i = 0; i < BLOCKS; ++i) dm[i] = (char*)m + i * BLOCK_SIZE;
    
    // Use the individual blocks, e.g. print their values
    for (int i = 1; i < BLOCKS; ++i) printf("%p \n", dm[i]);
    
    free(m);
    return 0;
}

注意:BLOCK_SIZE 必须满足您系统的对齐要求。