如何在堆上划分内存?
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
必须满足您系统的对齐要求。
假设我在堆上分配了一大块内存。为简单起见,假设它有 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
必须满足您系统的对齐要求。