Linux gcc:哪个选项启用对象大小跟踪和内置对象大小?

Linux gcc:哪个选项启用对象大小跟踪和内置对象大小?,linux,gcc,optimization,options,Linux,Gcc,Optimization,Options,在未经优化编译的代码中使用\uuuuu内置对象\u大小(ptr,1)时(-O0),它总是返回-1。为了获得实际的对象大小,必须至少使用-O1编译代码。我也想在-O0启用它,但到目前为止,我无法找到哪个选项启用它。我用选项-Q--help=optimizers、-Q--help=common和-Q--help=c检查了gcc生成的打印输出,并找到了由-O1添加的选项。不幸的是,当我将它们手动添加到命令行时,\u内置对象\u大小仍然返回-1 您知道在-O0编译时是否可以以某种方式启用此功能吗 我在L

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

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

我在Linux/x86_64上使用GCC4.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;
}
#包括
#包括
内联void f(常量字符*ptr)
{
printf(“%d\n”,(int)\u内置对象\u大小(ptr,1));
}
int main()
{
char*buf=malloc(10);
f(buf);
返回0;
}

这是不可能的,gcc没有在
-O0
处运行计算
\uuUbuiltin\u object\u size
结果所需的分析过程。您好,您是否尝试将
-fsanize=object size
标志传递给编译器?如果没有-O2,您需要使用类型0:
\uUbuiltin\u object\u size(ptr,0)
,而不是1。1仅适用于_强化_源=2