STD分配器是否会在堆上动态分配内存?它可以安全地删除内存吗?
Does the STD allocator dynamically allocate memory on the heap? does it safely delete memory?
因此,我正在尝试了解C 中的std::allocator<>
,并从参考网站中感到困惑。尤其是因为我读取了分配器的构建体和解构方法,在C 17
这是我写的以下代码
// Example with pointers and allocators
#include <iostream>
#include <memory>
int main()
{
std::allocator<int> nums;
int * first = nums.allocate(1); //is this on the heap, like with calling new int(4)?
int * second = nums.allocate(2);
*first = 7;
second[0] = 2;
second[1] = 4;
std::cout << *first << std::endl;
std::cout << second[1] << std::endl;
nums.deallocate(first, 1); //is the int safely deleted from memory?
nums.deallocate(second, 2);
}
当一个人调用分配方法时,返回的指针是在堆上返回到动态内存的点,还是分配的内存堆栈?
另外,当一个人调用DealLocate方法时,是否将指针从内存中删除?DealLocate等于delete
?
当一个人调用分配方法时,会在堆上返回到动态内存的指针
上
C 标准不使用单词 heap ,但是是的 std::allocator
从 free Store 中分配,这通常称为堆,因为那是数据结构通常用于实现它。
当一个人调用DealLocate方法时,是否将指针从内存中删除?DealLaike等于
delete
?
delete
做了两件事:它称为对象的攻击子并处理内存。std::allocator::deallocate
执行后一部分,仅执行后者。std::allocator::destroy
执行前者。请注意,当记忆被交易时,未指定,只是它是。
相关文章:
- C++ Python 的扩展 - 安全内存访问和内存布局
- CIN内存安全
- 访问"std::vector"的保留但未调整大小的内存作为原始内存是否安全?
- 带有此指针的内存安全吗?
- 在不同的内存位置同时写入 std::d eque 是否线程安全?
- 如何在没有动态内存分配(堆)的情况下为可变大小数组(矢量)定义安全容器或视图
- 将类复制到未初始化的内存中是否安全?
- 我致电CuctxDestroy后,重复使用CumeMalloc内存是安全的吗?
- 如何在<N>不发生内存泄漏的情况下同时(线程安全)填充 c++11 std::map<std::string,std::bitset*>?
- 使用安全零内存新建/删除时出现问题
- 在不隔离内存的情况下使用新的位置是安全的吗?
- 可靠地确保C++ 14 中的内存安全
- 从函数安全返回和处理动态分配的内存,C++ 11
- 在释放内存之前,请始终重新分配内存 - C 是安全的吗?
- C++多线程:线程安全的内存分配
- 如何从C或C 语言级别安全访问内存映射的硬件寄存器
- 用于读取输入文件的内存映射文件的安全
- C++以内存安全的方式使用给定向量的大小创建2D阵列
- 向量的向量是内存安全的吗?
- free()方法分配的内存安全吗?