
C语言各种数据在内存中的分配方式,分别对程序的运行效率有哪些影响? 5
展开全部
内存分配?
堆栈的综合效率最高(除寄存器外),一般函数(包括main())的变量都是在堆栈内的。
你可以显示声明register 但是是存在寄存器还是一般的堆栈完全由编译器决定优化,其实你加了也没用。。。。。堆栈是在内存的一块固定大小的区域,比较小,数据量大了会爆栈(综合最高是因为会有部分内容进入寄存器,寄存器比内存快)。
全局变量是在全局变量区的,全局变量区是在内存中的固定大小的一块区域。全局变量区也不怎么大,但是比堆栈大多了。。。。
函数代码区。。。是在内存 你无视好了。。。
堆区 是在内存的一块很大很大的区域,一切动态建立的对象(c用alloc家族函数 c++的new)都是在堆区,一般堆区是不会爆的,除非真的很大大大大大。。
效率上讲 寄存器最快,然后就是内存了,磁盘的读写不考虑。
综上,编译器会帮你优化的,你只要关心会不会爆栈,会不会爆全局变量,就行了。。
还有字符串常量区,也是在内存中的,你也无视好了。。。。。
还有静态区也是在内存中的,大小是编译器编译时决定的,你也无视好了。。。。
堆栈的综合效率最高(除寄存器外),一般函数(包括main())的变量都是在堆栈内的。
你可以显示声明register 但是是存在寄存器还是一般的堆栈完全由编译器决定优化,其实你加了也没用。。。。。堆栈是在内存的一块固定大小的区域,比较小,数据量大了会爆栈(综合最高是因为会有部分内容进入寄存器,寄存器比内存快)。
全局变量是在全局变量区的,全局变量区是在内存中的固定大小的一块区域。全局变量区也不怎么大,但是比堆栈大多了。。。。
函数代码区。。。是在内存 你无视好了。。。
堆区 是在内存的一块很大很大的区域,一切动态建立的对象(c用alloc家族函数 c++的new)都是在堆区,一般堆区是不会爆的,除非真的很大大大大大。。
效率上讲 寄存器最快,然后就是内存了,磁盘的读写不考虑。
综上,编译器会帮你优化的,你只要关心会不会爆栈,会不会爆全局变量,就行了。。
还有字符串常量区,也是在内存中的,你也无视好了。。。。。
还有静态区也是在内存中的,大小是编译器编译时决定的,你也无视好了。。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |