我正在写一个XNA游戏,我在那里进行逐像素碰撞检查.通过移位int和按位ORing来检查这种情况的循环通常难以阅读和理解.
我想添加私有方法,例如private bool IsTransparent(int pixelColorValue)使循环更具可读性,但我不希望方法调用的开销,因为这是性能敏感的代码.
有没有办法强制编译器内联这个调用,或者我是否只是希望编译器会进行这种优化?
如果没有办法强制执行此操作,是否有办法检查方法是否内联,而不是读取反汇编?如果内联并且没有其他调用者存在,该方法是否会显示在反射中?
编辑:我不能强迫它,所以我可以检测到它吗?
我想写一个内联函数,但是我收到一个错误.我该如何解决?
错误信息:
Undefined symbols for architecture i386:
"_XYInRect", referenced from:
-[BeginAnimation ccTouchesEnded:withEvent:] in BeginAnimation.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
码:
CGPoint location = CGPointMake(60, 350);
if (XYInRect(location, 53, 338, 263, 369)) {
}
inline BOOL XYInRect(CGPoint location, float MixX, float MixY, float MaxX ,float MaxY){
if (location.x >MixX && location.y >MixY && location.x <MaxX && location.y <MaxY) {
return YES;
} else {
return …Run Code Online (Sandbox Code Playgroud) 假设我有一个在程序的多个部分中调用的函数.我们还要说我对该函数的特定调用是在一个性能极其敏感的代码段中(例如,循环迭代数千万次并且每微秒计数一次).有没有办法可以强制编译器(gcc在我的情况下)内联单个特定函数调用,而不是内联其他函数?
编辑:让我完全清楚:这个问题不是强迫 gcc(或任何其他编译器)内联所有函数调用; 相反,它是关于请求编译器内联对函数的特定调用.
MethodImplAttribute与选项MethodImplOptions.AggressiveInlining和TargetedPatchingOptOut?之间有什么区别?
当我在Google上搜索时,每个人似乎都说(可能)内联方法但没有给出差异.
反正有两个<a>元素显示内联吗?
我试过:
<div class="form-inline">
<a>jjj</a>
<a>sss</a>
</div>
Run Code Online (Sandbox Code Playgroud)
并且
<div class="row-fluid">
<a class="inline">jjj</a>
<a class="inline">sss</a>
</div>
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我有一个模块,它收集并导出一些小函数,例如:
fromEither :: (MonadError e m) => Either e a -> m a
fromEither = either throwError return
Run Code Online (Sandbox Code Playgroud)
要么
withError :: MonadError e m => (e -> e) -> m a -> m a
withError = flip catchError (throwError . f)
Run Code Online (Sandbox Code Playgroud)
让它们内联是个好主意,因为在专门研究MonadError它的特定实例之后,可能会有很多代码被优化掉.
GHC的文件说:
GHC(与
-O往常一样)尝试内联(或"展开")"足够小"的函数/值,从而避免调用开销并可能暴露其他更精彩的优化.通常情况下,如果GHC决定函数"太昂贵"而无法内联,它将不会这样做,也不会导出其他模块使用的展开.
这是否意味着这些函数最有可能被视为具有INLINE编译指示(即它们在接口文件中记录的非优化RHS)?或者我必须添加INLINE自己?添加它会改变什么(假设GHC决定它们"足够小")?
我不介意GHC决定不介绍我的一些功能,如果它觉得它们太贵了,但总的来说我想让它们内联而不会污染我的源代码并添加INLINE到处.
如何在设计C++程序时减少可能的缓存未命中数?
内联函数每次都有帮助吗?或者只有当程序是CPU限制的时候才是好的(即程序是面向计算而不是面向I/O)?
我正在尝试让内联包在我的macbook上运行.以下代码块(来自cxxfunction示例)失败:
library(inline)
fx <- cxxfunction( signature(x = "integer", y = "numeric" ) , '
return ScalarReal( INTEGER(x)[0] * REAL(y)[0] ) ;
' )
fx( 2L, 5 )
Run Code Online (Sandbox Code Playgroud)
出现此错误:
Error in compileCode(f, code, language = language, verbose = verbose) :
Compilation ERROR, function(s)/method(s) not created! make: g++-4.2: No such file or directory
make: *** [file141b5882.o] Error 1
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为g ++可用:
g++ -v
Using built-in specs.
Target: i686-apple-darwin11
Configured with: /private/var/tmp/llvmgcc42/llvmgcc42-2336.1~22/src/configure --disable-checking --enable-werror --prefix=/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin11 --enable-llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2336.1~22/dst-llvmCore/Developer/usr/local …Run Code Online (Sandbox Code Playgroud) 默认情况下,C++ 17中的模板是否内联静态变量?这是一个例子:
template<typename T>
struct SomeClass {
static T test;
};
struct SomeClass2 {
static constexpr int test = 9;
};
Run Code Online (Sandbox Code Playgroud)
这些变量是内联的还是仍然需要使用ODR来定义ODR?
如何检测DOM元素是块还是内嵌javascript?
例如,是否有一个函数/属性为' <a>'标签返回'inline' (或''标签'为'block' <p>)?
谢谢.