尽管我尝试启用std:c++latest和单独使用c++17,但我无法使用在c++17中添加的std::aligned_alloc()函数。这是真实的吗?Visual Studio 2019难道没有实现这个古老的标准功能(而且还是一个非常重要的功能)吗?有其他人可以确认吗?
我所指的功能是:
我所指的功能是:
来自针对VC++ 2019的Microsoft C++语言一致性表:
C11 - 通用CRT实现了C++17所需的C11标准库部分,但不包括 C99 strftime() 中的E/O替代转换说明符,C11 fopen() 的独占模式和 C11 aligned_alloc()。后者可能不会被实现,因为C11以与Microsoft的free()实现不兼容的方式指定了aligned_alloc():即free()必须能够处理高度对齐的分配。
VC++具有特定于编译器的_aligned_malloc,用于将内存对齐到2的幂次方值,并参见在MS Visual Studio 2013中我可以使用什么代替std::aligned_alloc?。
aligned_alloc
返回的内存块与普通的realloc
和free
兼容。而 MSVC 的_aligned_malloc
则需要使用_aligned_realloc
和_aligned_free
。 - dxivstd
中,您可以编写一个函数char * double_string(char * str){return realloc(str,2 * strlen(str)+1);}
并调用相同的函数,无论str
是从malloc
还是aligned_alloc
获取的。在MSVC中,您需要单独的函数。 - dxiv