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释放所有分配的内存.这意味着它可以以某种方式计算只知道指针.那么将它从程序员中隐藏起来的原因是什么?
不幸的是,没有可移植的方法来获取new和分配的字节数malloc.出现这种情况有很多原因:
delete并free做什么都没有.因此,他们不需要存储大小信息.这在嵌入式平台中非常常见; 它允许你使用为其他平台编写的C或C++代码不变,只要你不做太多的分配.随着便携式语言,C和C++不能提供一个功能,将无法使用(或明确的,或相当快)对每一个平台.这就是为什么这在C++上不可用.也就是说,你不需要这个--C++提供std::vector,它可以跟踪你的分配大小,或者std::string为你处理所有这些细节.