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
的结果。
当 __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
的结果。