二十. 一些探究

全局变量:放在了数据段,大家都能用
局部变量:放到了栈中,给专门函数使用的

例子
汇编获取全局变量和局部变量的区别
解释为啥要这样改

在编译之后,全局变量的偏移量基本确定了,就是0x22b2在同一个编译器上内存位置基本相同,这个值不变;rip会改变在内存中

a,b

改变的就是你的程序在整个内存中的位置,但是a这个偏移相对于于程序不变 无论是8086,还是64位,都是一定的,编译之后,地址相同

但是局部变量地址有可能改变,不是一定不变的,因为多个不同函数调用test(),不同函数,一定对应不同的内存地址,虽然sum函数是对应这个test,相对地址不变,但是他们的真实地址还是改变的;


以下都是Xcode的内容,和8086基本相同

字符串地址也是不定的,是确定的,和常量相同;

xcode优化选项
在实际开发中,这些没有用到的变量,编译器并没有给他分配空间

为什么说switch比if效率高?
如果switch的比较情况比较多,他会自动的有一套算法,然后一下子直接找到位置,异步到位,而if,就会一个一个比较,所以比较慢

switch内部有算法优化,一部找到了结果,不会一一比较

看到反汇编就可以了!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容