我从微芯片上看过AES的例子.他们编写以下代码段:
bool AES_encrypt(uint8_t * plaintext, uint8_t * ciphertext, uint8_t * key)
{
bool encrypt_ok;
uint8_t * temp_key = key;
for(uint8_t i = 0; i < AES_BLOCK_LENGTH; i++){
AES.KEY = *(temp_key++);
}
Run Code Online (Sandbox Code Playgroud)
为什么他们将指针复制到临时变量中?我用Atmel工作室和反汇编程序以及这两种情况进行了验证
bool AES_encrypt(uint8_t * plaintext, uint8_t * ciphertext, uint8_t * key)
{
bool encrypt_ok;
/* Load key into AES key memory. */
uint8_t * temp_key = key;
for(uint8_t i = 0; i < AES_BLOCK_LENGTH; i++){
AES.KEY = *(temp_key++);
}
bool AES_encrypt(uint8_t * plaintext, uint8_t * ciphertext, uint8_t * key)
{
bool encrypt_ok;
/* Load key into AES key memory. */
for(uint8_t i = 0; i < AES_BLOCK_LENGTH; i++){
AES.KEY = *(key++);
}
Run Code Online (Sandbox Code Playgroud)
导致相同的汇编代码(-O1选项).那么这个符号的目标是什么?
正如您所注意到的,在优化的构建中,没有任何性能优势或劣势,任何有价值的编译器都会在优化的早期阶段将它们减少到完全相同的IR.
它可能只是一种风格选择,有些人发现直接修改参数会让人感到困惑,而且他们更愿意将它们保留在整个功能中; 因为这是示例代码,所以它意味着所有级别的程序员都可以轻松理解.
这种方法的额外优势包括以下事实:添加引用原始值(可能是调试语句)的代码或在调试版本中检查调试器中的原始值更容易.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |