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