![]() |
1
13
这取决于实现。担保是“ 至少 10个字符。
这取决于实现。
这取决于实现。 “这取决于实现”,我的意思是标准中没有定义。 |
![]() |
2
5
这完全取决于编译器和运行时库。它只是精确定义了什么影响
在您的情况下,似乎分配的内存比请求的内存多一点,它可能会存储管理信息,如当前内存块的大小、有关相邻可用空间区域的信息或帮助调试器尝试检测缓冲区溢出和类似问题的信息。 |
![]() |
3
3
它完全依赖于实现。一般情况下,您必须在其他地方存储元素的数量。实现必须为至少指定的元素数分配足够的空间,但它可以分配更多的空间。 |
![]() |
4
3
这取决于平台,但是的,在许多平台上都有。 |
![]() |
5
2
准确地说,根据标准,
的内部
我会给你一个大概的介绍 能够 内部工作,但不要把它当作绝对真理。它是专门为这个解释而写的。
简而言之,
反向发生在
在我上面描述的过程中,可能会有一些花哨的技巧,比如对
|
![]() |
6
0
您正在堆中创建一个10个字符的数组,并将第0个元素的地址存储在指针中。这类似于在C中执行malloc操作。
您正在删除(释放内存)先前语句分配的堆内存。这类似于在C中执行释放操作。 |
![]() |
7
0
它依赖于实现,但内存块的元数据通常存储在返回内存地址之前的区域中。在10个字节之前观察到的更改可能是为此块更新的元数据(可能是块的大小写入元数据),在10个字节之后是为下一个块更新的元数据(仍然未分配,可能是指向空闲列表中下一个块的指针)。 处理堆不是一个好主意,因为它不可移植。但是,如果您想实现这种堆魔法,我建议您实现自己的内存池(只需从堆中获取一大块内存并自己管理)。一个可能的出发点是 libmm . |
![]() |
8
0
尽管具体情况取决于实现,但实现需要存储的一条信息是数组中元素的数量。或者,如果它不直接存储它,它将需要从分配的块大小中准确地派生它。 原因是,如果用new[]分配对象数组,则当用delete[]删除对象时,需要调用数组中每个对象的析构函数。delete[]需要知道要销毁多少对象。这就是为什么需要将new与delete匹配,将new[]与delete[]匹配。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 3 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 4 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 4 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 4 月前 |