您好、欢迎来到现金彩票网!
当前位置:老k棋牌 > 栈区 >

c语言堆和栈静态区的理解

发布时间:2019-07-01 07:30 来源:未知 编辑:admin

  静态区:保存自动全局变量和static变量(包括static全局和局部变量)。静态区的内容在总个程序的生命周期内都存在,由编译器在编译的时候分配。栈:保存局部变量。栈上的内容只在函数...

  静态区:保存自动全局变量和static 变量(包括static 全局和局部变量)。静态区的内容

  栈:保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容

  堆:由malloc 系列函数或new 操作符分配的内存。其生命周期由free 或delete 决定。

  在没有释放之前一直存在,直到程序结束。其特点是使用灵活,空间比较大,但容易出错。

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部1、栈区(stack)—由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 分配方式 :定义于函数中的变量

  2、堆区(heap) — 一般由程序员分配释放 , 若程序员不释放,程序结束时可能造成内存泄漏 。注意它与数据结构中的堆是两回事,分配方式:malloc,new出来的东西都是堆中

  3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(BSS)。 -程序结束后由系统释放 定义于函数外,或者用static修饰的变量 存放于静态区。

  展开全部堆:由malloc 系列函数或new 操作符分配的内存。其生命周期由free 或delete 决定。

  栈:保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但空间大小有限。

  静态区:保存自动全局变量和static 变量(包括static 全局和局部变量)。静态区的内容在总个程序的生命周期内都存在,由编译器在编译的时候分配。

  展开全部楼主问这样的问题,需要澄清平台。比如windows下的与linux下的编译器及很多嵌入式C编译器不同。为什么考虑嵌入式C?原因是目前C语言的很大市场在嵌入式领域。windows下,除了某些特殊需要,java,C++,C#已经优势尽显了。

  另外,讨论了半天,q在你代码的那里?我怎么没找到??我眼睛都揉红了也没找见呀

  1. 函数形参和函数内部非静态局部变量都在栈上分配(所以a,b,p本身都在栈上。但p指向的内容在堆上。q在哪里,我找不到)。

  sp是堆栈指针。”字数“是说:你分配一个字节的局部变量,编译器也给你一个字的长度的空间。原因是,堆栈是具有字长度的。16位、32位机器下,字长度为16,64位机器下,字长度为32.

  而且,windows下,栈是从高地址向低地址增长的。为什么?栈与堆共享空间,并且,堆从低向高长,栈从高向低长,降低溢出风险。

  静态区名字本身就说明了他的特性:静止的,不随程序的运行变化。也就是相对的说,堆和栈都是动态的。静态区是编译器在编译时指定长度、链接时定位地址、windows载入器载入时分配内存。

  这里的动与静是编译器和链接器的说法,是语言层面。不适用于系统层面。Windows随时可能将任何用户程序程序的全部资源“请出”内存,也可重新载入,此时,什么静都是浮云。

  还有返回值。楼主的main不返回值编译器会警告你的。返回值存在什么地方?

  嵌入式系统里可能这些都不适用。比如,某些嵌入式处理器的形参直接使用寄存器(R0~R15,或A、B等)

  我觉得都是在栈里面,因为p属于形参,a,b属于局部变量,所以都在栈区分配内存!!

  展开全部a,和b肯定是在一起的,q,和a,b可以说是在一起,因为,a,q之间的地址在vc6.0上相差100,他们都是在线程栈里面分配的地址,p分配的地址就不在一起了,p是在进程的堆里面分配的追问栈:保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容

http://theenigmaco.com/zhanqu/207.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有