gpt4 book ai didi

c++ - 编译器找不到 "aligned_alloc"函数

转载 作者:可可西里 更新时间:2023-11-01 17:40:15 25 4
gpt4 key购买 nike

尝试获得一个可移植的函数以在具有对齐特征的堆上进行分配。

找到“aligned_alloc”,我认为它在 stdlib.h 中,但 gcc 似乎不这么认为

error: 'aligned_alloc' was not declared in this scope

使用带有标志 -std=c++11 -m64 的 gcc

尝试导入

#include <stdlib.h>
#include <cstdlib>

最佳答案

aligned_alloc 在 C11 中定义。它(还)没有为 C++ 定义,尽管它可能会出现在 C++17 中。 (也就是说,它不在标准 C 库中预期在标准 C++ 库中可用的(当前)209 个函数列表中。请参阅 C++ 标准的附录 C。)

(2018 年 8 月更新:aligned_alloc 确实由 C++17 定义,正如上面预测的那样。所以如果你有足够新的 C++ 编译器,你应该能够通过指定使用 C++17 来避免特性测试宏的所有困惑;对于 g++clang++,这可以通过 -std=c++17 命令行标志。)

如果您想将它与 GCC(或者更具体地说,与 g++)一起使用,您应该使用功能测试宏 _ISOC11_SOURCE。与所有功能测试宏一样,在任何 #include 之前,必须在每个需要它的文件中对这个宏进行#define。 [参见注释 1](如果您使用 -std=c11 编译 C 程序,则不需要功能测试宏。)

我从 man aligned_alloc 中找到了正确的功能测试宏:

Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

  posix_memalign(): _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600

aligned_alloc(): _ISOC11_SOURCE

如上所示,您可以阅读

man 7 feature_test_macros

有关功能测试宏的更多信息,包括 glibc 识别的宏列表,以及每个宏适用的时间。

aligned_alloc 联机帮助页还记录了非常相似的 posix_memalign 函数,该函数自第 6 期以来一直是 Posix 标准的一部分,并且具有不同(且更常见)的功能测试宏,如上所述。 posix_memalign 应该可以移植到任何 Posix 系统,该系统可能包含也可能不包含比接受在 C++ 中使用 C11 函数的系统更多的系统。

注意事项

  1. 这意味着你不应该把 #define 放在头文件中,因为头文件不能在第一个 include 之前包含:) 但是,如果你使用类似 #include 的东西"config.h" 以包含平台定义,每个源文件都以 #include "config.h" 开头,在任何其他 #include 之前,并且#define 在任何 #include 之前出现在 config.h 中,你应该没问题。

关于c++ - 编译器找不到 "aligned_alloc"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29247065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com