问题标签 [inlining]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - Delphi 2010 内联没用?
Delphi 中的内联函数或过程有什么用(特别是这里的 v2010,但我对 Turbo Delphi 有同样的问题)?
帮助中有一些关于它可能并不总是内联函数,因为“某些标准”无论这意味着什么。
但是我发现通常内联函数(即使是非常简单的有 3 或 4 行代码的函数)会减慢代码而不是加快代码速度。
一个好主意是“内联所有内容”的编译器选项。我不在乎我的 exe 是否会增长 50% 左右以使其运行得更快。
有没有一种方法可以强制 Delphi 真正内联代码,即使它没有被编译器决定内联?那真的很有帮助。否则,您需要在代码的多个区域中复制过程代码的“手动内联”,并带有类似“//inlining failed here,因此如果您更改接下来的 5 行,请在其他 8 个重复点中更改它们,此代码存在"
这里有什么提示吗?
c++ - 内联非成员函数内的本地类使用 MSVC2005 生成 LNK2005
显然,MSVC2005 未能内联导致 LNK2005 的本地类的成员函数。
编译以下内容时遇到此 LNK2005 错误:
common.h
内容:
foo.cpp
内容:
bar.cpp
内容:
LNK2005.cpp内容:
错误信息是:
关于本地课程,ISO IEC 14882-2003 说:
9.8 本地类声明
类可以在函数定义中定义;这样的类称为本地类。本地类的名称在其封闭范围内是本地的。本地类在封闭作用域的范围内,并且对函数外部的名称具有与封闭函数相同的访问权限。本地类中的声明只能使用封闭范围内的类型名称、静态变量、外部变量和函数以及枚举数。
封闭函数对本地类的成员没有特殊的访问权限;它遵守通常的访问规则(第 11 条)。本地类的成员函数应在其类定义中定义,如果它们被定义的话。
我错过了什么?
对我来说,它看起来像是一个编译器错误。GCC 和 MSVC2008 编译它就好了。但是,我想知道他们是否真的会内联调用,或者只是在链接阶段丢弃两个符号之一。作为一个有趣的注释,您可以注意到甚至没有调用这个本地类成员函数。
我想知道 MSVC2005 是否有解决方法。我试图在 MSDN 中搜索这个典型问题,但没有取得多大成功:我什至无法找到编译器的已知错误列表。
附件:LNK2005.zip
gcc - 内联函数有哪些好的启发式方法?
考虑到您只是在尝试优化速度,决定是否内联函数的好的启发式方法是什么?显然代码大小应该很重要,但是当(比如说)gcc 或 icc 确定是否内联函数调用时,是否还有其他通常使用的因素?该领域是否有任何重要的学术工作?
c++ - 头文件中定义的函数是否保证被内联?
如果我在头文件中定义一个非成员函数,它是否总是由编译器内联,还是编译器根据其启发式方法进行选择?我知道 __inline 只是一个提示,标题中的函数是否相同?
delphi - 为什么Delphi编译器不内联汇编函数?
有时我会写很短的汇编函数,比如
这似乎是内联的最佳候选人:
但 Delphi 编译器不允许这样做。为什么?
更新:
感谢 ldsandon,有一份 5.5 年前的 QC 公开报告。该报告包含一些建议(如扩展 asm 指令)以简化编译器的 asm 内联。我更愿意在过程/函数级别引入“naked”指令,它告诉编译器它不必为过程创建堆栈框架,并且可以选择保留哪些寄存器(在 eax、edx 和 ecx 中)。
如果使用 BASM 代码进行高效内联过程的一般任务很困难(并且可能是不必要的),那么一个好主意是为最重要的情况启用内联(例如具有显式声明寄存器使用的裸函数)。
linker - 使 LLVM 内联一个库中的函数
我正在尝试LLVM
从库中内联一个函数。
我有LLVM 位码文件(手动生成),我llvm-link
用. 我设法将所有内容链接在一起并执行,但我无法从库中内联函数。关于如何做到这一点的任何线索?clang
llvm-ar
LLVM
c - 抑制内联警告
我收到警告,例如:
为了摆脱这个我改变了makefile删除-Winline来摆脱这个。我没有收到任何内联警告。但是,我不知道在性能方面这样做有多明智。有人可以建议我吗?
添加了更多信息:
这是警告:
对应的代码是:
来自 list.h
并来自 search.c
c++ - c++ 函数指针内联
我知道我可以将函数指针作为模板参数传递并内联调用它,但我想知道这些天是否有任何编译器可以内联一个“明显”的内联函数,例如:
在 Visual Studio 2008 下,它足够聪明,可以将其归结为直接调用指令,所以它似乎很遗憾不能更进一步?
c# - C# 中的内联扩展
我正在用 C# 为我的 DirectX 3D 引擎开发一个数学库。我正在使用 SlimDX,这是一个很棒的组合且功能强大的库。SlimDX 提供了相当多的数学类,但它们实际上是原生 D3DX 对象的包装器,因此虽然对象本身非常非常快,但我认为互操作不是,因为我的托管 C# 代码优于它们。
我的具体问题与浮点比较有关。一种规范的方法是定义一个 epsilon 值,并将该值与浮点值之间的差异进行比较以确定接近度,如下所示:
函数调用开销会淹没实际比较,所以这个微不足道的函数将在 C++ 中内联,C# 编译器会这样做吗?有没有办法告诉 C# 编译器我想要一个内联方法?
c++ - 是否可以内联 lambda 表达式?
我想内联一个 lambda 表达式,因为出于性能原因它非常短。是否可以?