![]() |
1
15
在典型的实现中,动态内存块的大小以某种方式存储在块本身中——这是正确的。但是没有标准的方法来访问这些信息。(实现可以提供实现特定的访问方法)。就是这样
实际上,在一个典型的实现中,
什么
(这意味着在一般情况下,由
但是,请注意,由于上述原因,通常只在数组元素类型具有非平凡析构函数时存储数组元素计数。也就是说,这个计数并不总是存在的。这就是为什么提供一种标准方法来访问数据是不可行的原因之一:要么必须始终存储数据(这会浪费内存),要么通过析构函数类型(这会让人困惑)限制数据的可用性。
为了说明以上内容,当您创建
数组的大小(即
|
![]() |
2
7
您很可能可以访问它,但是它需要您的分配器的详细知识,并且不可移植。C++标准没有指定 怎样 实现存储这些数据,因此没有一致的方法来获取它。我认为它没有指定,因为不同的分配器可能希望以不同的方式存储它,以提高效率。 |
![]() |
3
5
这是有意义的,例如,分配的块的大小不一定与数组的大小相同。同时
it is true
那个
换句话说,通过不指定任何关于实现的内容,它允许分配尽可能快速、廉价地进行。(如果每次实现都需要存储数组的大小和分配的块的大小,那么它会浪费您可能不需要的内存)。 |
![]() |
4
3
简单地说,C++标准不需要对此进行支持。如果您对编译器的内部有足够的了解,就有可能知道如何访问这些信息,但这会 通常地 被认为是不好的做法。请注意,对于堆分配的数组和堆栈分配的数组,内存布局可能存在差异。
请记住,您在这里所说的基本上也是C样式数组——尽管如此
|
![]() |
Patrick · 删除动态数组C时程序崩溃++ 9 年前 |
![]() |
sestus · 在另一个类中执行删除时出现Valgrind错误 9 年前 |
![]() |
Oleksiy · delete的一些用途是什么?[副本] 11 年前 |