在使用malloc或realloc分配内存后,我遇到了获取结构指针大小的问题。我通过在一个单独的计数器中跟踪内存来解决这个问题,但我想知道这是一个错误还是有办法正确查询结构指针的大小。
示例代码演示了无论我分配给struct指针多少内存,当使用sizeof()方法查询时它总是返回4。
typedef struct {
int modelID;
int bufferPosition;
int bufferSize;
} Model;
Model *models = malloc(10000 * sizeof(Model));
NSLog(@"sizeof(models) = %lu", sizeof(models)); //this prints: sizeof(models) = 4
答案 0 :(得分:3)
4是正确的答案,因为“models”是一个指针,而指针是4个字节。您将无法以这种方式找到数组的长度。你没有使用NSArray的原因吗?
答案 1 :(得分:1)
4是正确的答案。 指针指向可能包含任何内容的内存位置。当您查询指针的大小时,它会给出保存指针的内存位置的大小,在您的情况下为4。
例如
int *a = pointing to some large number;
int *b = pointing to a single digit number;
在上述情况下,a和b都具有相同的大小,无论它们指向何处。
有关详细信息,请查看此帖size of a pointer
答案 2 :(得分:1)
如果我理解正确,你想要达到分配缓冲区的大小。
sizeof
如果在编译时评估错误的方法。缓冲区的大小是运行时概念。
您需要一种方法来查询C库,以返回指向缓冲区的指针的分配大小。
某些系统可以获取此类信息,例如Mac OS上的malloc_size
。
答案 3 :(得分:0)
sizeof(myvar)
将返回指针的大小。在32位环境中,它等于4(字节)。
为什么不使用sizeof (Model)
?