c++ - 访问`std::vector`的保留但未调整大小的内存作为原始内存是否安全?
问题描述
如果一个人想要分配一块内存而不将其初始化为零,那么执行以下操作是否安全?
std::vector<uint8_t> block(0);
block.reserve(10000000);
// now access block.data()[0] through block.data()[9999999] as raw uninitialized memory
如果没有,是否有比malloc
和更新的工具来完成这项工作free
?
解决方案
如果你有编译时间常数和相对较小的尺寸,你可以使用std::array
:
std::array<uint8_t,10000> block;
如果不使用原始内存:
std::unique_ptr<uint8_t[]> block( new uint8_t[size] );
或在 c++14 之后
auto block = std::make_unique<uint8_t[]>( size );
推荐阅读
- python - 在 R Studio 中找不到 python lib .so 和 init spacy?
- python - TensorFlow:将 py_func 保存到 .pb 文件
- json - 嵌套资源相对于父级的 JSON API 标识符
- iot - 无需直接访问即可将代码更改部署到 IoT 设备
- php - Symfony OptionsResolver 数组的多维数组
- oracle - 每次加载页面时如何确保加载经典报告中的 PL/SQL 结果
- c# - 为什么“0x5”没有被解析为有效的十六进制数?
- python - 如何更改字符串的值
- pandas - 如何使用多条件进行左连接?
- python - 如何为多个页面重复工作代码?