尝试使用对齐功能在堆上分配可移植函数.
找到"aligned_alloc",我认为这是在stdlib.h中,但gcc似乎不这么认为
错误:未在此范围内声明'aligned_alloc'
使用带有标志的gcc -std = c ++ 11 -m64
尝试导入
#include <stdlib.h>
#include <cstdlib>
Run Code Online (Sandbox Code Playgroud)
ric*_*ici 10
aligned_alloc在C11中定义.它(尚未)为C++定义,尽管它可能出现在C++ 17中.(也就是说,它不在标准C库中的(当前)209函数列表中,这些函数应该在标准C++库中可用.请参阅C++标准的附录C.)
(更新于2018年8月:aligned_alloc确实是由C++ 17定义的,如上所述.所以如果你有一个足够新的C++编译器,你应该能够通过指定使用C++ 17; for g++和clang++,可以使用-std=c++17命令行标志.)
如果要将它与gcc一起使用(或者更具体地说,使用g ++),则应使用功能测试宏_ISOC11_SOURCE.与所有功能测试宏一样,此宏必须#define在每个需要它之前的文件中#include.[参见注释1](如果您正在编译C程序,则不需要使用功能测试宏-std=c11.)
我找到了正确的功能测试宏man aligned_alloc:
glibc的功能测试宏要求(参见feature_test_macros(7)):
Run Code Online (Sandbox Code Playgroud)posix_memalign(): _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 aligned_alloc(): _ISOC11_SOURCE
如上所示,您可以阅读
man 7 feature_test_macros
Run Code Online (Sandbox Code Playgroud)
有关功能测试宏的更多信息,包括glibc识别的宏列表,以及每个宏应用的时间.
该aligned_alloc联机帮助页还记录了非常相似的posix_memalign功能,该功能自问题6以来一直是Posix标准的一部分,并且具有不同(和更常见)的功能测试宏,如上所述.posix_memalign应该可以移植到任何Posix系统,它可能包含或不包含比那些接受在C++中使用C11功能的系统更多的系统.
#define头文件,因为头文件在第一个包含之前不能包含:)但是,如果您使用类似于#include "config.h"包含平台定义的内容,并且每个源文件都#include "config.h"以其他任何内容开头#include,并且#define发生在config.h任何之前#include,你应该没问题.