【发布时间】:2017-11-18 18:06:05
【问题描述】:
我想知道 malloc 分配的大小。
我已经写了下面的源代码。
test.c
#include <stdio.h>
#include <stdint.h>
#include <malloc.h>
void main(void)
{
uint8_t *test;
test = (uint8_t *)malloc(sizeof(uint8_t)*4);
printf("sizeof(test) = %d\n",malloc_usable_size(test));
free(test);
}
我希望大小为 4。
但结果是 12。
sizeof(test) = 12
你能告诉我有什么问题吗?
我希望尺寸 4 正确出来。
【问题讨论】:
-
不,malloc_usable_size() 返回正确的大小。错误的是您对正确尺寸的期望。
-
到目前为止缺少的内容:
malloc_usable_size()用于调试,而不是用于您的主要代码。即使尺寸实际上更大,您也不应该使用它。 -
不要将
malloc_usable_size视为确定分配大小的一种方式。出于多种原因 - 1)它不可移植。 2)您应该自己跟踪您的分配。既然你调用了 malloc,你就知道你通过了什么大小。如果您很难记住它,请做一些簿记。一种方法是在分配开始时为size_t分配额外空间并将大小放在那里。您传递给malloc的实际大小。其他人已经明确了为什么它返回 12 而不是 4。 -
@user2371524 “即使尺寸实际上更大,你也不应该使用它。”我喜欢函数名称 (
malloc_usable_size) 的字面意思是可用大小。