我应该使用什么 C 类型来计算内存中的对象?
What C type should I use to count objects in memory?
假设我想跟踪我的程序进行了多少次分配,所以每当我 malloc
或 free
时我 increment/decrement 一个计数器。同样,我可能想计算链表的长度。
我应该为这样的值使用什么类型?我认为 "number of objects in memory" 的最坏情况是 地址中的字节数 space。也就是说,我的计数器应该与指针类型大小相同。这表明我应该将我的计数器设置为:
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
统计内存中的东西必须假设内存中最大的对象是整个地址的大小space.
计算内存中对象的正确、惯用的 C 类型是什么?是size_t
,还是指针类型,还是别的?
如果您想对此迂腐,那么您应该使用 uintptr_t
,这是一个保证大到足以容纳指针值的(无符号)整数。
因此,理论上您可以用它计算内存的每个可寻址字节。如果您计算内存中的 actual 个对象,则不会。但至少那个无法到达的上限可以保证你的数据类型足够大。
假设我想跟踪我的程序进行了多少次分配,所以每当我 malloc
或 free
时我 increment/decrement 一个计数器。同样,我可能想计算链表的长度。
我应该为这样的值使用什么类型?我认为 "number of objects in memory" 的最坏情况是 地址中的字节数 space。也就是说,我的计数器应该与指针类型大小相同。这表明我应该将我的计数器设置为:
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
统计内存中的东西必须假设内存中最大的对象是整个地址的大小space.
计算内存中对象的正确、惯用的 C 类型是什么?是size_t
,还是指针类型,还是别的?
如果您想对此迂腐,那么您应该使用 uintptr_t
,这是一个保证大到足以容纳指针值的(无符号)整数。
因此,理论上您可以用它计算内存的每个可寻址字节。如果您计算内存中的 actual 个对象,则不会。但至少那个无法到达的上限可以保证你的数据类型足够大。