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

gcc: which option enables object size tracking and __builtin_object_size?

__builtin_object_size(ptr, 1) 用于未经优化编译的代码 (-O0) 时,它总是 returns -1。为了获得实际的对象大小,必须至少使用 -O1 编译代码。我也想在 -O0 启用它,但到目前为止我无法找到启用它的选项。我检查了 gcc 使用选项 -Q --help=optimizers-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;
}

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