汇编语言可以帮助深刻理解高级语言
高级语言可分为
解释语言 python js html
直接转汇编的 c c++
依赖虚拟机的 java go
其次可做破解(吾爱破解)以及外挂之用
分析switch语句和if/else的性能区别
if/else编译器转化为cmp -> je
而switch语句在case比较少的情况下也是 转化为cmp-je
而在case比较多大概6个以上 且switch的整型值不太大的情况下会做优化
分两种 case 1 3 5 8 10 此类会优化为 有几个case会从1-10开辟连续十个内存空间(每个空间4个字节)存储调准语句的内存地址 其中2 4 6 7 9 会跳转default所在的内存空间 jmp [4* exb + 基指地址]
第二种若是当case的值最大为100时 会另外通过开辟100个字节,每个字节的意义是从开始值如1他的处理逻辑的序列数
先拿到当前case的这个序列数,去调用jmp【4*序列数+机制地址】
在这点上编译器可谓比较智能
另外一个例子帮助我们发现一些本质
如 int a=5 int b=a++ +2; int a=5 int b=++a +2; 的区别
通过vs反编译上述c++代码,可知道
mov ptr[a] , 5
mov eax, ptr[a]
add eax, 2
mov ptr[b], eax
mov ecx, ptr[a]
add ecx, 1
mov ptr[a], ecx
可知第一种情况a=6 b=7
第二种情况:
mov dword ptr[a], 5
mov eax, ptr[a]
add eax, 1
mov ptr[a], eax
mov ecx, ptr[a]
add ecx, 2
mov ptr[b], ecx
可知a=6,b=8
在c++中若没有给一个变量初始化,则其实不会创建默认的构造函数,而java中因为有默认值的存在,int a 默认0,基本都会创建默认的构造函数
c++中 只有一个类对象 若该对象也没有构造函数则这个类也没有构造函数