2011-02-14 106 views

回答

3

没有可靠的方法来做到这一点 - 你必须亲自存储这些信息。

operator new[]()函数可以以任何方式实现(并由您替换),因此您只是无法知道大小,除非您知道具体的实现细节。

在Visual C++中,内置类型的默认实现只是将调用转接到malloc() - 然后您可以尝试_msize(),但它又是不可移植的,甚至可能不可靠。

2

没有,一般你不能。你必须单独存储这些信息。

如果您需要将该内存用作字符串或数组,我的建议是使用std::stringstd::vector,它们自己完成所有簿记工作。


1.即 “至于标准是关于”


我看到你的问题是MSVC++ - 具体的;在这种情况下,一些堆调试助手 are provided,但它们只在项目以调试模式编译时才起作用;我认为有一些其他编译器特定的函数来获得分配的大小,但如果使用自定义分配器,它将不起作用。

另一方面,像LocalAlloc这样的API会告诉您分配的内存块有多大(请参阅例如LocalSize)。

但我认为这是一个更清洁的设计,可以让您自己跟踪这些信息。

1

不需要。您需要将分配的内存量存储为一个单独的变量,并且您需要随身携带,只要您想对分配的结构执行某些操作。这很麻烦,但可能会很快。作为一个安全和舒适的替代使用std :: vector,boost :: array等。