【发布时间】:2020-11-07 18:48:07
【问题描述】:
尽管我确实尝试分别启用 std:c++latest 和 c++17,但我无法使用 c++17 中添加的 std::aligned_alloc() 函数。这是真实生活吗? Visual Studio 2019 是否完全没有在标准中实现像这样的古老功能(也是一个非常重要的功能)?其他人可以确认吗?
我指的功能:
【问题讨论】:
标签: visual-studio c++17
尽管我确实尝试分别启用 std:c++latest 和 c++17,但我无法使用 c++17 中添加的 std::aligned_alloc() 函数。这是真实生活吗? Visual Studio 2019 是否完全没有在标准中实现像这样的古老功能(也是一个非常重要的功能)?其他人可以确认吗?
我指的功能:
【问题讨论】:
标签: visual-studio c++17
来自Microsoft C++ language conformance table for VC++ 2019:
C11 - 通用 CRT 实现了 C++17 所需的 C11 标准库的部分,除了 C99 strftime() E/O 替代转换说明符,C11 fopen() 独占模式, 和 C11 aligned_alloc()。后者不太可能实现,因为 C11 以与 Microsoft 的 free() 实现不兼容的方式指定了aligned_alloc():即 free() 必须能够处理高度一致的分配。
VC++ 有编译器特定的_aligned_malloc 用于对齐到 2 次幂值的内存,另请参阅 What can I use instead of std::aligned_alloc in MS Visual Studio 2013? 。
【讨论】:
aligned_alloc 返回的内存块与常规realloc 和free“兼容”。 MSVC 的 _aligned_malloc 需要 _aligned_realloc 和 _aligned_free。
std 中,您可以编写函数char *double_string(char *str) { return realloc(str, 2 * strlen(str) + 1); } 并调用相同的函数,无论str 是从malloc 还是aligned_alloc 获得的。使用 MSVC,您需要单独的函数。