【问题标题】:Why is there not a function in C that returns size of memory allocated pointed to by a pointer? [closed]为什么 C 中没有返回指针指向的分配内存大小的函数? [关闭]
【发布时间】:2021-03-11 07:58:28
【问题描述】:

在搜索了一下分配(通过malloc 之类的东西)后释放(通过free)的工作原理后,我感到很困惑。

阅读后,消息来源说,在分配内存时,实际上还分配了一个字来存储分配的大小。这就是free 用来释放内存的东西。但是有了这些信息,又出现了另一个问题,我在任何地方都找不到答案:如果分配的内存大小存储在某处,为什么 C 中没有函数或方法可以通过 @ 之类的方式为我们提供分配的内存大小987654324@?

【问题讨论】:

  • 您可以自己解析堆或使用具有地址和长度的struct 创建一个malloc 包装器。
  • 关于为什么某些东西不存在的问题只能由参与语言初始设计的人来回答。但一般来说,要么他们甚至没有考虑这样的功能,要么该功能与其他一些设计目标相冲突。我猜是前者,因为调用malloc 的代码当然知道它需要多少内存。另一方面,如果是后者,我可以想到几个设计目标会与这个特性发生冲突。
  • "它实际上多分配了一个字来存储分配的大小。" --> 存储每个分配的大小未指定,存在其他可能性。

标签: c memory-management malloc free


【解决方案1】:

C 标准仅指定分配和释放内存所需的函数。这意味着如何管理堆是系统上标准库的实现细节。 Linux 的实现方式可能与 Microsoft 的实现方式大不相同。

话虽如此,有时这些实现会暴露额外的函数,这些函数会暴露堆的内部状态。例如,Linux 有一个名为 malloc_usable_size 的函数,它传递一个指向已分配内存的指针并返回该地址可写入的字节数。

不过,最好不要依赖这样的系统特定功能。你的程序应该有一些方法来跟踪一个 malloc 的内存块指向了多少空间。

【讨论】:

    猜你喜欢
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多