这是一个base64编码的实现函数,编译器把我的语句优化没了,导致结果错误


图1,为代码片段
图2,为优化后的汇编指令,红色部分为被优化掉的语句
图3,为vs工程优化选项,已经设置了不优化
简单来说就是 ,编译器把我图2红色部分代码优化没了,导致后来的字节都是0
求汇编大神解释一下,为什么会这样?
这是一个base64编码的实现函数,编译器把我的语句优化没了,导致结果错误


图1,为代码片段
图2,为优化后的汇编指令,红色部分为被优化掉的语句
图3,为vs工程优化选项,已经设置了不优化
简单来说就是 ,编译器把我图2红色部分代码优化没了,导致后来的字节都是0
求汇编大神解释一下,为什么会这样?
以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
在编译过程中,编译器会根据特定的目标平台和处理器架构来选择最合适的优化策略。在你的示例中,编译器可能选择了“无优化”(/Od)选项,这通常意味着它没有进行任何级别的优化。
然而,在某些情况下,编译器可能会忽略一些不必要的操作或者重新排列指令以提高性能。例如,你提到的current &=(unsigned char)0x3F; 这一行可能已经被编译器重排以减少额外的操作。同样,current = ( ( unsigned char ) ( orig _ data [ i ] < < 4 ) ) & ( ( unsigned char ) 0x30 ); 和 current = ( ( unsigned char ) ( orig _ data [ i+1 ] < 2 ) ) & ( ( unsigned char ) 0x3C ); 也被编译器进行了优化,因为它们可以合并多个操作到一个指令中。
这些优化通常是为了提高程序的执行效率,但有时也可能牺牲可读性和可维护性。在这种情况下,如果有必要,开发者可以在编译时使用诸如 /Optimize 或 /Relax 等选项来指定更详细的优化级别,以确保代码仍然具有良好的可读性和可维护性。