为pod分配适当的内存
Proper allocate memory for PODs
我的回答收到了一个关于我代码中的内存分配的评论。我使用了new[]
和delete[]
,因为我以前读过,你不应该在c++中使用malloc()/free()
(即这里)。所讨论的代码本质上是:
ULONG outBufLen = sizeof(IP_ADAPTER_ADDRESSES);
GetAdaptersAddresses(0, 0, NULL, NULL, &outBufLen);
PIP_ADAPTER_ADDRESSES pCurrAddresses = (IP_ADAPTER_ADDRESSES *)new uint8_t[outBufLen];
//...
delete[] pCurrAddresses;
我想要分配的内存字节大小来自函数GetAdaptersAddresses()
。我的问题是:这段代码有什么问题吗?如果是,在现代c++中分配内存的正确方式是什么?
malloc()/free()
应该是没有问题的-这是c++代码,我没有看到使用malloc()
代替new[]
有任何改进。对吧?std::vector<>
似乎不对我-我可以写std::vector<uint8_t> bytes(outBufLen, 0); PIP_ADAPTER_ADDRESSES pCurrAddresses = (IP_ADAPTER_ADDRESSES *)bytes.data();
,但我会有一个坏(因为std::vector<>::data()
是const)。使用
std::unique_ptr<uint8_t[]>
似乎也很奇怪-因为我必须将其转换为原始指针。
替代品吗?
在大多数情况下,您使用std::vector
的第二个建议在c++中是正确的。data()
不是const(好吧,它是const向量,但在您的情况下,它不是)。c++标准确保data()返回指向您的pod的连续内存存储的指针。
相关文章:
- 将字符串存储在c++中的稳定内存中
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 如何在 malloc 内存中初始化非 POD 数据
- 如何创建非 POD 类型的连续内存池?
- POD 结构(相同类型的成员):成员是否位于连续的内存位置?
- 避免在禁用复制的 POD 类型的内存上使用"-Wclass-memaccess"
- 共享内存空间可以将数据(非POD)发送到另一个共享内存吗?
- 如果我将一个POD结构分配给另一个POD组织,是否存在内存泄漏
- 为pod分配适当的内存
- 我是否需要使一个类型为POD,以便用内存映射文件持久化它?
- C++ POD 结构继承?是否有任何关于派生成员的内存布局的保证