-
慕田峪9158850
比较.lang.c常见问题单.问题7.27 -问:那么我可以质疑malloc找出一个分配的块有多大?不幸的是,没有标准或便携的方式。(一些编译器提供非标准扩展。)如果你需要知道,你必须自己跟踪。(另见问题7.28.)
-
Smart猫小萌
没有找到这些信息的标准方法。但是,有些实现提供了如下所示的功能msize做这件事。例如:米制在Windows上苹果糖大小MacOS苹果机可用尺寸关于具有glibc的系统不过,请记住,malloc将分配所请求的最小大小,因此您应该检查实现的msize变量是否实际返回对象的大小或堆上实际分配的内存。
-
绝地无双
C思想是为程序员提供工具来帮助他完成工作,而不是提供抽象来改变他工作的性质。如果以牺牲性能限制为代价,C还试图避免使事情变得更容易/更安全。对于内存区域,您可能希望做的某些事情只需要区域开始的位置。这包括使用以空结尾的字符串,操作第一个字符串。n区域的字节(如果已知该区域至少如此大),依此类推。基本上,跟踪一个区域的长度是额外的工作,如果C自动完成它,它有时会做不必要的工作。许多库函数(例如fread())需要指向区域开始的指针,以及该区域的大小。如果您需要一个区域的大小,您必须跟踪它。是的,malloc()实现通常会跟踪某个区域的大小,但是他们可能间接地这样做,或者将其整到某个值,或者根本不保留它。即使他们支持它,找到这样的大小可能比自己跟踪它要慢一些。如果您需要一个知道每个区域有多大的数据结构,C可以为您做到这一点。只需使用一个结构来跟踪该区域的大小以及指向该区域的指针。