Ben*_*sen 6 c compiler-optimization
假设我有一个文件,我在其中对某些数据进行了一些计算.它可能是(非常psedo计算)像这样:
void hash_value(unsigned char* value){
unsigned char i;
for(i + 0; i < 10; i++){
value[i] ^= (0x1b+i)
}
}
void break_value(unsigned char* value){
unsigned char i;
for(i = 0; i < 10; i++)
value[i] &= 0x82;
}
void affect_value(unsigned char* value){
hash_value(value);
break_value(value);
}
Run Code Online (Sandbox Code Playgroud)
在我的主要内容中,我会做以下事情:
#include "smart_calculations.h"
int main() {
unsigned char value[16] = {'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S'};
affect_value(value);
// Do other stuff
}
Run Code Online (Sandbox Code Playgroud)
由于我不打算更改值数组的内容,但我需要先进行计算才能继续执行其他操作.我想一些编译器会识别并优化代码,以便在编译时计算数据.
我的问题是,我如何(尽可能)强制编译器在编译时进行此优化,这样"Smart_calculations"文件中的方法不会浪费最终产品中的空间,并且数组的初始值不是'汇编到程序中?
最简单、最通用的方法是手动进行暂存。也就是说,在构建阶段显式运行进行预计算的代码,并且仅将结果编译到程序中。
如果你想用 C 语言完成这一切,你可以创建一个smart_calculations.c带有函数的main函数。您首先编译一个smart_calculations可执行文件,生成
unsigned char value[16] = { ... };
Run Code Online (Sandbox Code Playgroud)
作为输出。将此输出放入文件中,例如smart_generated.h.
你真正的程序将是#include这个文件:
int main() {
#include "smart_generated.h" // 'value' is now a local variable
// Do other stuff
}
Run Code Online (Sandbox Code Playgroud)
...或者(如果您想要一个全局变量)您可以将生成的结果放入一个.c文件中并将其链接到您的程序中。
当然,使用这种方法,您不仅限于用 C 语言进行“智能计算”。您可以使用构建时可用的任何编程语言或环境。