首页 > 解决方案 > 有没有办法告诉 C 编译器内联变量?

问题描述

我是一个相对较新的 C 程序员,我正在编写一个国际象棋程序,我想确保它尽可能快地运行。这是我的程序在循环中的一段代码,在该循环中我正在编码移动到一个 16 位变量中。每个方格占用 6 位。

Square targetSquare = GET_LS1B(leftPawnAttacks);
moveList[i] = (targetSquare << 4) | ((targetSquare - 7) << 10);

为了提高可读性,我想做的是定义一个新变量,originSquare如下所示

Square targetSquare = GET_LS1B(leftPawnAttacks);
Square originSquare = targetSquare - 7;
moveList[i] = (targetSquare << 4) | (originSquare << 10);

所以前 6 位代表移动的原点方格,接下来的 6 位代表目标方格。在这个特定的循环中,所有的移动都是相同的类型:原点距离目标总是-7。

我不想浪费指令声明Square originSquare并稍后查找其值 1 行,因为循环的这一部分每秒运行数千次。

我的问题是:有没有办法告诉 C 编译器或预处理器将它推targetSquare - 7到它在这个循环范围内看到的位置originSquare,即内联变量,还是已经这样做了?

我最好的猜测是,如果我声明变量 const,编译器可能会自行执行此操作,但我想确定并了解有关 C 和编译的更多信息。

标签: ccompilationcompiler-optimizationchess

解决方案


推荐阅读