可靠地访问指针会计数据

时间:2017-08-19 03:01:11

标签: c pointers

我已经读过:How does free know how much to free?当有一个内存分配时用指针表示,如

float (*ptr)[10]=malloc(sizeof(float)*100)

对于一个10x10数组,ptr有一个“头”,其中“会计”信息告诉“步长”,什么不是这样你可以正确执行指针算法并使用free等等。

是否有一致(不依赖于架构)和可靠(定义的行为)可以让人们掌握这些信息?

我在其他地方读过,当存在强制转换和动态内存分配时,跟踪数组长度的事实上的方法是手动分配一个槽来存储大小。这自然让我相信我的问题的答案是“不”,但我认为我不想做出假设,或者我会得到自己的内存泄漏。

1 个答案:

答案 0 :(得分:2)

将评论转换为答案。

没有定义的标准方法来获得“已分配内存块的大小”。每个实现都必须知道它分配的每个块的大小,但是使用该实现的程序员无法知道大小(通常)。

  

所以它依赖于一些东西,但如果所有这些都是已知的,系统,架构,编译器,你说没有资源可以找出内存中格式化的东西吗?

没有标准(在法律上也不是事实上的标准)获取有关分配的内存块大小的信息。除此之外,库分配的大小通常大于请求的大小(肯定是因为内务处理数据,但即使数据部分也可以四舍五入为8的倍数或16的倍数) - 代码报告请求的大小或分配的大小?

而且,作为1201ProgramAlarm noted,开源系统的一个选项是查看C库的malloc()free()实现,看看它的作用和设计一种为程序员提供答案的机制。然而,任何此类研究都是针对该系统的 - 一般来说,不同的系统会以不同的方式进行 - 如果系统是一个封闭的源系统,整个想法就会陷入困境。