在未经优化编译的代码中使用__builtin_object_size(ptr, 1)
时(-O0
),它总是返回-1。为了得到实际的对象大小,代码必须至少用-O1
编译。我也想在-O0
启用它,但到目前为止我还找不到哪个选项启用它。我检查了用-Q --help=optimizers
选项执行gcc生成的打印输出,-Q --help=common
和-Q --help=c
,并找到了-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条答案
按热度按时间n1bvdmb61#
这是不可能的,gcc不会运行计算
-O0
处__builtin_object_size
结果所需的分析通道。