b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

“ c / c ++知识解释”以超详细的方式解释了堆栈和堆之间的区别!

电脑杂谈  发布时间:2020-07-30 08:06:30  来源:网络整理

c 堆栈区别_c 数据结构 堆栈_c语言堆栈入门堆和栈的区别

初步知识-程序存储器分配

C / C ++编译程序占用的内存分为以下几部分

1. 堆栈区域(stack): 由编译器自动分配和释放,存储函数参数值,局部变量值等.

操作模式类似于数据结构中的堆栈.

2. 堆: 通常由程序员分配和释放,如果程序员不释放,则操作系统可能会在程序结束时将其返回

接收. 请注意,它与数据结构中的堆不同,并且分配方法类似于链表,哈哈.

3. 全局区域(静态区域)(静态): 将全局变量和静态变量的存储放在一起并初始化

全局变量和静态变量在一个区域中,未初始化的全局变量和未初始化的静态变量彼此相邻

一个区域. -程序结束后由系统释放.

4. 文本常量区域: 常量字符串位于此处. 程序结束后由系统释放

5. 程序代码区: 存储函数体的二进制代码.

示例程序

c语言堆栈入门堆和栈的区别_c 堆栈区别_c 数据结构 堆栈

这是由一位资深的非常详细的人写的

#include“ stdio.h”

inta = 0; //全局初始化区域

char * p1; //全局未初始化区域

voidmain(void)

{

intb; //堆栈

chars [] =“ abc”; //堆栈

char * p2; //堆栈

char * p3 =“ 123456”; // 123456/0在常量区域中,而p3在堆栈中.

staticintc = 0; //全局(静态)初始化区域

p1 =(char *)malloc(10);

c 数据结构 堆栈_c 堆栈区别_c语言堆栈入门堆和栈的区别

p2 =(char *)malloc(20);

///分配的10和20个字节位于堆区域中.

strcpy(p1,“ 123456”); // 123456/0放在常量区域中c 堆栈区别,编译器可以对其进行优化,并将p3指向的“ 123456”放在一个位置.

}

编辑推荐给每个人一个具有超级学习氛围的地方,C / C ++交流企鹅裙: [8.7.0 + 9.6.3 + 2.5.1]适合大学生,小白,想换职业,想通过此求职加入. 这条裙子上有很多学习资料,有大神回答交流问题,而且每晚都有免费的现场课程

堆和栈的理论知识

###如何申请

stack: 由系统自动分配. 例如,在函数中声明一个局部变量int b. 系统会自动为堆栈中的b打开空间

之间

堆: 程序员需要自己申请并指定大小. c

中的malloc函数

例如p1 =(char *)malloc(10);

c 数据结构 堆栈_c语言堆栈入门堆和栈的区别_c 堆栈区别

在C ++中使用new运算符

例如p2 = new char [10];

但是请注意,p1和p2在堆栈中.

应用后的系统响应

堆栈: 只要堆栈的剩余空间大于请求的空间,系统就会为程序提供内存,否则将报告异常以指示堆栈溢出

出去.

堆: 首先,您应该知道操作系统有一个记录空闲内存地址的链表. 当系统从程序接收到应用程序时c 堆栈区别

将遍历链接列表以查找第一个堆节点,该第一个堆节点的空间大于请求的空间,然后将该节点从空闲节点的列表中删除

删除它,并将节点的空间分配给程序. 此外,对于大多数系统而言,它将位于此内存空间中

在第一个地址处记录此分配的大小,以便代码中的delete语句可以正确释放内存空间.

此外,由于找到的堆节点的大小可能不完全等于应用程序的大小,因此系统将自动删除多余的堆

将点数放回空闲列表中.

c语言堆栈入门堆和栈的区别_c 数据结构 堆栈_c 堆栈区别

对应用程序大小的限制

堆栈: 在Windows中,堆栈是一个扩展到低位地址的数据结构,并且是一个连续的内存区域. 这句话的意思

认为,堆栈顶部的地址和堆栈的最大容量是由系统预先定义的. 在WINDOWS下,堆栈的大小为2M(也

它是1M,简而言之,它是在编译时确定的常数. 如果请求的空间超过了堆栈的剩余空间,它将

提示溢出. 因此,堆栈中可用的空间较小.

堆: 堆是一种扩展到高地址的数据结构,并且是一个不连续的内存区域. 这是因为系统使用链表进行存储

的可用内存地址

自然是不连续的,并且链表的遍历方向是从低地址到高地址. 堆的大小

受计算机系统中有效虚拟内存的限制. 可以看出,堆获得的空间更加灵活,更大.

应用效率比较:

系统自动分配堆栈,速度更快. 但是程序员无法控制它.

堆是new分配的内存,通常速度较慢并且容易出现内存碎片,但是使用起来最方便.

此外,在WINDOWS下,最好的方法是使用VirtualAlloc分配内存. 它不在堆或堆栈中.

尽管最不方便使用,但直接在进程的地址空间中保留一块内存. 但是它既快速又灵活.

堆和栈中的存储内容


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-289146-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 张萌
        张萌

        因为意外事故中国海军在自己南海领海丢失核水雷若干枚

      • 崔鹏鹏
        崔鹏鹏

        央视报告什么都挨骂

      • 琪姆妮
        琪姆妮

        老美没有牌了

      热点图片
      拼命载入中...