假设我在源文件中有这个小函数

static void foo() {}

我构建了一个优化版本的二进制文件,但我不希望这个函数内联(出于优化目的).有没有可以在源代码中添加宏来防止内联?

推荐答案

您需要特定于gccnoinline属性.

此函数属性防止 函数不会被考虑为 内衬.如果函数没有 有副作用,有 优化,而不是内联 使函数调用得到优化 离开,尽管函数调用是 活着.为了不让这样的电话 优化了,把 asm ("");

按如下方式使用它:

void __attribute__ ((noinline)) foo() 
{
  ...
}

C++相关问答推荐

使用指针调用函数并在参数中传递它

当它们都是字符时,为什么我不能使用 strcat 组合这两个字符?

使用 printf() 输出正确的小数位数?

SIMD - 如何从不同元素宽度的 2 个向量中添加相应的值(char 或 uint8_t 添加到 int)

浮点文字中有效十进制数字的最小数量是多少,以尽可能正确地表示该值?

从指向其第二个成员的指针获取指向结构的指针是否合法?

C中的通用快速排序

是否有更高性能的 powf(10,floorf(log10f(x))) 实现

使用整数存储许多布尔值是否值得?

| vs < 用于标准输入和标准输出,在 C 中使用拼接、管道和 tee 命令

在 C 中浮点到二进制

指针似乎与 printf 的输出不同步

我怎样才能在另一个宏中使用一个宏来将宏的定义连接到某个东西? C/C++

打印素数的程序

如何正确拦截 Linux 内核 5.* 中的系统调用?

如果平台上“long”和“int”的大小相同 - “long”和“int”有什么不同吗?

我们可以在变量名中写注释吗?

升级到 Catalina 10.15 后无法在 Mac 上编译 C 程序

项目中包含程序集文件时,来自 mmap 的意外 exec 权限

防止控制台窗口在 Visual Studio C/C++ 控制台应用程序上关闭