在没有优化(__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;
}
答案 0 :(得分:1)
这是不可能的,因为gcc不会运行在__builtin_object_size
处计算-O0
的结果所必需的分析过程。