gcc:哪个选项可以启用对象大小跟踪和__builtin_object_size?

时间:2016-09-06 10:36:49

标签: linux gcc optimization options

在没有优化(__builtin_object_size(ptr, 1))的情况下编译的代码中使用-O0时,它总是返回-1。为了获得实际的对象大小,必须至少使用-O1编译代码。我想在-O0启用它,但到目前为止,我无法找到启用它的选项。我检查了使用选项-Q --help=optimizers-Q --help=common-Q --help=c执行的gcc生成的打印输出,并找到-O1添加了哪些选项。不幸的是,当我手动将它们添加到命令行时,__builtin_object_size仍返回-1。

您是否知道在-O0进行编译时是否可以以某种方式启用此功能?

我在Linux / x86_64上使用gcc 4.8.4。

作为参考,我正在添加用于测试的代码:

#include <stdio.h>
#include <stdlib.h>

inline void f(const char* ptr)
{
    printf("%d\n", (int)__builtin_object_size(ptr, 1));
}

int main()
{
    char* buf = malloc(10);
    f(buf);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

这是不可能的,因为gcc不会运行在__builtin_object_size处计算-O0的结果所必需的分析过程。