假设我想跟踪我的程序已经进行了多少分配,因此每当我malloc
或free
时,我会增加/减少计数器。同样,我可能想计算链接列表的长度。
我应该使用哪种类型来进行这种值?我认为"内存中对象数"的最坏情况是地址空间中的字节数 。也就是说,我的计数器应与指针类型相同。这表明我应该将计数器设置为:
void * num_allocated_objects = 0;
但是,这看起来像是void*
的非常规!一个消息来源告诉我,我实际上应该使用size_t
:"您在计算某些内容时使用size_t
,并且确定它不能为负。"
我不太确定。size_t
"用于表示对象的大小"。这两个答案似乎不兼容:我可以想象一个系统可能的对象数大于字节中最大对象的大小。使用size_t
来计算内存中的事物必须假设内存中最大的对象是整个地址空间的大小。
在内存中计算对象的正确,惯用的C类型是什么?是size_t
还是指针类型?
如果您想对此进行ped脚,则应该使用uintptr_t
,这是一个(无符号的)整数,保证足够大以保持指针值。
因此,从理论上讲,您可以使用它来计算每个可寻址的内存字节。如果您在内存中计数实际对象,那么您会不会。但是至少这种无法达到的上限可以保证您的数据类型足够大。