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

mwkjh3gx  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(222)

在未经优化编译的代码中使用__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;
}
n1bvdmb6

n1bvdmb61#

这是不可能的,gcc不会运行计算-O0__builtin_object_size结果所需的分析通道。

相关问题