编译&反汇编
编译与反汇编相关的一些东西
liu_if_else
这个作者很懒,什么都没留下…
展开
-
从汇编代码的角度观察switch与if...else,乘除与移位的差别
Switch与if…else有以下两个函数,功能基本相同,sum5()是switch版本,sum6()是if else版本。 public int sum5(int x,int y){ switch(x){ case 1: y+=1; break; case 2: y+=2;原创 2016-06-15 17:49:05 · 1928 阅读 · 0 评论 -
汇编指令push,mov,call,pop,leave,ret建立与释放栈的过程
感觉这东西有点烧脑,花了一下午时间终于整个捋顺了整个流程。 想理解好此过程,理解每个指令的作用,必须结合指令行地址,栈地址和寄存器一起来分析,否则很容易被绕晕。 大图图片说明:内存地址,汇编指令都为简写,用的十进制,栈空间1个格子大小是4*8=32位(对应32位操作系统),指令行长度应为1-6字节,都简化为1字节。为了简化汇编指令行,函数都没有参数。实际执行顺序一列中,左边为寄存器或栈空间地址,原创 2017-05-28 18:41:45 · 24141 阅读 · 1 评论 -
编译分析:提memcmp.c+gcc四十米大刀到C#世界中屠龙
在stackoverflow上有关于在C#中如何进行最快的byte数组判断:[https://stackoverflow.com/questions/43289/comparing-two-byte-arrays-in-net](https://stackoverflow.com/questions/43289/comparing-two-byte-arrays-in-net)据讨论的网友统计,最快的方法是使用C语言的memcmp.c。下文会针对memcmp源码写一个C#版本进行比较测试,并进行编译分析。原创 2017-07-04 16:48:34 · 2647 阅读 · 0 评论 -
用三元操作符替代if-else以降低CPU分支预测惩罚实现Unity内函数13倍提速
测试对象1,Unity脚本(C#) 2,C# DLL(mcs build 动态链接库导入Unity) 3,C Native Code(LLVM编译后导入Unity)被测试函数源码(C#):两个随机数数组进行大小比较,一个数组保存大数,另一个保存小数。 public void Minmax1_CSharp(double[] a,double[] b,int n){ int i原创 2017-11-09 20:20:52 · 2124 阅读 · 0 评论