paip.提升性能3倍--使用栈跟VirtualAlloc代替堆的使用.



#----为什么要设计堆栈,它有什么独特的用途?

为了性能 ....  堆比栈的性能

也有的说法为了编程容易...这个是错误的.因为使用堆+func也能实现编程简单地..



#----为什么stack 比堆快,stackAccess 要快两到三倍



主要的2点::  使用堆额外的操作多,而且机器硬件上直接支持栈操作..

堆栈都是一段内存条中的内存区域,感觉上,应该上没有多大的访问速度差别..但是,实际上,还是有很大的的速度效率区别..



1.存取路径短1倍. 堆的分配/释放都要比栈要慢的多

结论:可以明显看出,前者直接有目的地从栈中读取数据到寄存器eax中,后者则要先把指针值读出来,再通过指针去找需要的地址的值,根据我们关于计算机组成原理的常识,多了一次访问内存,显然效率低了。



在使用栈时,是直接从地址读取数据到寄存器,然后放到目标地址;使用堆时,第一步将分配的地址放到寄存器,然后取出这个地址的值,然后放到目标地址。大概是这样,堆的数据读出要多一步,我现在没环境,明天去看一下汇编代码就清楚了。




1.a  堆在分配和释放时都要调用函数..他们做了很多额外的工作,而栈却不需要这些

栈只是个LIFO的队列。堆的结构要复杂得多。



1.b  机器直接支持

栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高

cpu有专门的寄存器(esp,ebp)来操作栈,堆都是使用间接寻址的



作者 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax



2. 另外由于栈访问比较频繁,被高速Cache缓存的几率比较大,速度也会快 。

栈在CPU内部的内存cache命中率高,因为更满足局部性。



3.栈的变量可以直接存储在寄存器...所以,更快.

局部变量的操作是直接读写寄存器



4.因为堆 经常造成内存碎片,造成存取速度大的减少..





#-----------另一个性能提升的方法VirtualAlloc 快速内存

.VirtualAlloc分配内存,他不是在堆,也不是在栈是直接在进程的地址空间中保留一快内存



#静态变量速度怎么样

instanceAccess 和 staticAccess 的执行时间基本相同。但是,stackAccess 要快两到三倍

参考 :: 尽可能使用堆栈变量(我比较喜欢) - 西部数码站长资讯中心.htm



#怎么使用栈??

局部变量法

尽可能不个静止的变量,实例变量先转换成个局部变量,计算结束后在转换出去...

尽可能使用原生数据类型...基本数据类型包括byte、int、char、long、float、double、boolean和short。



#---硬堆栈跟软堆栈

硬堆栈是由硬件自动完成,其堆栈区也是固定的,软堆栈属于用户程序中的临时区





#----栈空间大小不大,不过能调整了..

栈空间是1M左右的。并不要求很大,一般对象才几个字节,1M大约有一百万字节,所以还是挺充足的。而且,当一个函数返回之后,他所占的栈空间就会被回收,提供给下一个函数使用。综上,能不用new最好不new

paip.提升性能3倍--使用栈跟VirtualAlloc代替堆的使用.的更多相关文章

  1. paip.提升性能--多核cpu中的java/.net/php/c++编程

    paip.提升性能--多核cpu中的java/.net/php/c++编程 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http ...

  2. paip. 提升性能---hibernate的缓存使用 总结

    paip. 提升性能---hibernate的缓存使用 总结 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog ...

  3. paip.提升性能---mysql 优化cpu多核以及lan性能的关系.

    paip.提升性能---mysql 优化cpu多核以及lan性能的关系. 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:/ ...

  4. paip.提升性能---mysql 性能 测试以及 参数调整.txt

    paip.提升性能---mysql 性能 测试以及 参数调整.txt 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://b ...

  5. paip.提升性能---jvm java 工具使用.

    paip.提升性能---jvm java 工具使用. 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn ...

  6. paip.提升性能---协程“微线程”的使用.

    paip.提升性能---协程的使用. 近乎无限并发的"微线程" 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:h ...

  7. paip.提升性能---并行多核编程哈的数据结构list,set,map

    paip.提升性能---并行多核编程哈的数据结构list,set,map vector/copyonwritearraylist 都是线程安全的. 或者经过包装的list ::: collection ...

  8. paip.提升性能---list,arraylist,vector,linkedlist,map的选用..

    paip.提升性能---list,arraylist,vector,linkedlist,map的选用.. arraylist,vector基本一样,但是,vector线程安全的. 作者Attilax ...

  9. paip.提升性能---string split

    paip.提升性能---string split 大概一万次就能看到慢的兰.. /////split 慢的原因.因为使用了正则表达式的,这样,就慢的了.. 作者Attilax  艾龙,  EMAIL: ...

随机推荐

  1. TCP/IP、Http的区别

    TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据.关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只 ...

  2. 开源PLM软件Aras详解三 服务端简易开发

    废话少说,直接进入主题, 以CAD为例: 先找到CAD对象类:具体操作见下图 双击打开,找到服务端事件:见下图 点击新建对象,点击添加,新建Method 编写Method,语言分为前端和后端,前端支持 ...

  3. eclipse 配置黑色主题

    虽然以前也使用eclipse的黑色主题,但是配置起来稍微麻烦一点. 这里先声明,下面的方式适合最新版本的Eclipse Luna,旧的版本可以下载我提供的这个插件,并将其放在eclipse目录下的pl ...

  4. iis+php+mysql

    来源:http://www.ttjcnet.com/forum.php?mod=viewthread&tid=137&extra= 首先下载php-5.2.0-win32.zip,my ...

  5. centos安装youcompleteme

    哈哈,我又回来了,简单的重新装了一边虚拟机,又把vim配置了一遍,这回有信心把youcomplete的安装方法贴出来了,先给个权威的链接,然后给出具体步骤,保证没问题可以安装成功 http://www ...

  6. UWP深入学习三:依赖属性、附加属性和数据绑定

    Dependency properties overview Custom dependency properties Attached properties overview Custom atta ...

  7. Python3学习(3)-高级篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 文件读写 源文件test.txt line1 line2 line3 读取文件内容 f = ope ...

  8. linux下使用SSL代理(SSLedge)

    refer to: https://eurekavpt.com/page/ssledge-on-linux 启动非常简单./ssledge-term-x64 -f config -D 其中的confi ...

  9. day7----面向对象编程进阶

    本节内容: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 静态方法 它与类唯一的关联就是需要通过类名来调用这个方法 #静态方法实际跟类没关系,不 ...

  10. 如何自适应网页的协议(http/https/……)

    今天在百度统计(tongji.baidu.com)看到了一种脚本写法,以前确实不知道,记录一下,也算有所收获. 一个站点被部署的时候,同时支持http也支持https,但是当一个站点采用https访问 ...