c - 我应该使用什么 C 类型来计算内存中的对象?

标签 c pointers memory types size-t

假设我想跟踪我的程序进行了多少次分配,因此每当我 mallocfree 时,我都会递增/递减计数器。同样,我可能想计算链接列表的长度。

对于这样的值我应该使用什么类型?我认为“内存中的对象数量”的最坏情况是地址空间中的字节数。也就是说,我的计数器应该与指针类型的大小相同。这建议我应该将计数器设置为:

void * num_allocated_objects = 0;

但是,这看起来像是 void* 的非常规用法!一位消息人士告诉我,我实际上应该使用 size_t:"You use size_t when you are counting something, and are sure that it cannot be negative."

我不太确定。 size_t is "used to represent the size of an object" 。这两个答案似乎不兼容:我可以想象一个系统,其中可能的对象数量大于最大对象的大小(以字节为单位)。使用size_t来统计内存中的东西必须假设内存中最大的对象是整个地址空间的大小。

计算内存中对象的正确、惯用的 C 类型是什么?是 size_t,还是指针类型,还是其他类型?

最佳答案

如果您想对此迂腐,那么您应该使用uintptr_t,它是一个保证足够大以容纳指针值的(无符号)整数。

因此,理论上您可以用它来计算内存的每个可寻址字节。如果您计算内存中的实际对象,则不会。但至少那个无法到达的上限保证了你的数据类型足够大。

关于c - 我应该使用什么 C 类型来计算内存中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40877518/

相关文章:

c - const 指针作为函数参数的含义

c++ - 指针增量 - 奇怪

java - java程序内存中的临时文件

c - 在静态数组的情况下,bss 的大小按意外字节递增

c++ - 链接ibus(libibus),cmake中的glib

c - 从标准输入输入文件时无限读取输入

javascript - 如何在 javascript 中运行对象的 onEvent 方法?

c++ - 有没有办法通过共享内存中的指针到达某个字节?

c++ - std::vector - 如何释放 vector 中 char* 元素的内存?

c - fscanf 不破坏完全拆分文件