为了账号安全,请及时绑定邮箱和手机立即绑定

确定C中动态分配内存的大小

确定C中动态分配内存的大小

C
慕雪6442864 2019-07-04 17:35:28
确定C中动态分配内存的大小在C中是否有一种方法可以找到动态分配内存的大小?例如,之后char* p = malloc (100);是否有办法找出与p?
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

比较.lang.c常见问题单.问题7.27 -

问:那么我可以质疑malloc找出一个分配的块有多大?

不幸的是,没有标准或便携的方式。(一些编译器提供非标准扩展。)如果你需要知道,你必须自己跟踪。(另见问题7.28.)


查看完整回答
反对 回复 2019-07-04
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

没有找到这些信息的标准方法。但是,有些实现提供了如下所示的功能msize做这件事。例如:

不过,请记住,malloc将分配所请求的最小大小,因此您应该检查实现的msize变量是否实际返回对象的大小或堆上实际分配的内存。


查看完整回答
反对 回复 2019-07-04
?
绝地无双

TA贡献1946条经验 获得超4个赞

C思想是为程序员提供工具来帮助他完成工作,而不是提供抽象来改变他工作的性质。如果以牺牲性能限制为代价,C还试图避免使事情变得更容易/更安全。

对于内存区域,您可能希望做的某些事情只需要区域开始的位置。这包括使用以空结尾的字符串,操作第一个字符串。n区域的字节(如果已知该区域至少如此大),依此类推。

基本上,跟踪一个区域的长度是额外的工作,如果C自动完成它,它有时会做不必要的工作。

许多库函数(例如fread())需要指向区域开始的指针,以及该区域的大小。如果您需要一个区域的大小,您必须跟踪它。

是的,malloc()实现通常会跟踪某个区域的大小,但是他们可能间接地这样做,或者将其整到某个值,或者根本不保留它。即使他们支持它,找到这样的大小可能比自己跟踪它要慢一些。

如果您需要一个知道每个区域有多大的数据结构,C可以为您做到这一点。只需使用一个结构来跟踪该区域的大小以及指向该区域的指针。


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 865 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信