【发布时间】:2019-01-23 09:38:48
【问题描述】:
我注意到 std::aligned_alloc() 进入 C++17,我喜欢它。但是 - 当我需要重新分配时会发生什么?我可以手动执行此操作(假设当前分配地址的可用空间只是我要求的空间量),但标准库中不应该有此功能吗?
【问题讨论】:
-
经过一番搜索,我在标准库中找不到任何用于显式重新分配的内容,但 c++17 确实有一个
std::align()函数,可以让您自己编写realloc()不太困难(并不是说它太难了)。链接是:en.cppreference.com/w/cpp/memory/align -
相关的,如果不是本质上的副本:stackoverflow.com/questions/20314602/…
-
@Alerra:问题是,作为用户,我不知道还有多少可用空间,所以我必须过于保守;而系统库或内核确实知道;所以我会分配比我应该更频繁...
-
这很好。我正在搜索 SO 并遇到了关于此的其他问题(这是一个非常有效的问题),但是是的,C++ 没有支持我所知道的对齐的标准库
realloc()绝对是奇怪的。也许在未来的版本中? -
我不确定他们是否会给您
std::aligned_realloc(),因为如果您无法扩展当前缓冲区,您需要获得一个新缓冲区,复制所有内容,然后释放旧缓冲区.如果您有非平凡的类型,这并不重要。本质上它将重建vector。
标签: c++ c++17 memory-alignment dynamic-allocation memory-reallocation