新分配了多少字节?

Sha*_*dor 4 c++ linux memory-management

可能重复:
如何在malloc之后获取内存块长度?

如果我有一个指针,是否可以了解分配了多少字节new?当我用Google搜索时,我找到了适用于Windows的解决方案:_msize()对于Mac : malloc_size(). 但Linux没什么.

如果没有,有人知道为什么它对程序员隐藏了吗?delete应该知道这样的信息.

更新:

据我所知,如果我有这个代码:

 class A {   
   ~A() {}
   int m_a; 
 }; 
 class B : public A {
   ~B() {}
   int m_b; 
 };

 int main() {   A * b = new B();   delete b;   return 0; }
Run Code Online (Sandbox Code Playgroud)

将调用A的析构函数,但仍将new释放所有分配的内存.这意味着它可以以某种方式计算只知道指针.那么将它从程序员中隐藏起来的原因是什么?

bdo*_*lan 5

不幸的是,没有可移植的方法来获取new和分配的字节数malloc.出现这种情况有很多原因:

  • 在某些平台上,deletefree什么都没有.因此,他们不需要存储大小信息.这在嵌入式平台中非常常见; 它允许你使用为其他平台编写的C或C++代码不变,只要你不做太多的分配.
  • 即使在更常见的平台上,系统也可能分配不同于您要求的字节数.通常,你的配置将对齐到一些较大规模-可能很多比你原来的要求较大.存储元数据也可以被存储在一个非常缓慢的数据结构-你不会想采取锁和时间要求严格的代码访问哈希表.

随着便携式语言,C和C++不能提供一个功能,将无法使用(或明确的,或相当快)对每一个平台.这就是为什么这在C++上不可用.也就是说,你不需要这个--C++提供std::vector,它可以跟踪你的分配大小,或者std::string为你处理所有这些细节.