堆栈溢出
堆栈是一组相同数据类型的组合,具有一定的容量限制,一旦超出这个容量限制,就会发生堆栈溢出。当堆栈的空间已经被数据占满时,再向其中存放数据,就会超出堆栈的容量,此时将会发生上溢;而当堆栈中已经没有数据,此时再从堆栈中取出数据将会发生下溢。堆栈溢出的原因包括堆栈尺寸设置过小、递归调用过深、函数调用层次过深等。
堆栈区别
空间分配和管理方式不同
堆一般由程序员控制空间的分配和释放,可以动态扩张或缩减,因此堆的大小不固定。而栈由编译器自动管理,分为动态分配和静态分配。编译器完成静态分配,alloca()函数完成动态分配,并由编译器进行释放。
申请的空间大小不同
由于堆由程序员控制分配和释放空间,大小不固定,所以堆获得的空间一般比较大且灵活。栈是一块连续的内存区域,系统会预先规定好栈的最大容量和栈顶的地址,因此能从栈获得的空间较小。
申请效率不同
由于堆是程序员分配,所以容易产生碎片且速度较慢,但是使用方便。栈是由系统自动分配,程序员无法控制,但是速度更快。
内存地址增长方向不同
堆是向高地址扩展的数据结构,从内存的低地址向高地址,沿着内存地址增加的方向增长。栈是向低地址扩展的数据结构,增长方向与堆相反,是从内存的高地址向低地址,沿着内存地址减小的方向增长。
堆栈平衡
当我们在堆栈中进行操作的时候,压入堆栈的地址可能会在中途发生变化。所以如果要返回父程序,那么在执行 RET 指令前,必须保证 ESP 指向我们之前压入堆栈的地址。如果指向的地址错误,那么堆栈会不平衡,导致程序崩溃。如果我们通过堆栈传入参数,那么就必须要在函数执行完毕之后,平衡由参数导致的堆栈变化。
堆栈的特点
堆栈具有如下特点:
- 堆栈的存取速度仅次于直接位于 CPU 中的寄存器,存取速度非常快;
- 内存大小可以进行动态分配;
- 必须确定存在栈中的数据大小与生存期,具备较高的灵活性;
- 在读取数据时,按照堆栈指示器中的地址读取数据,会自动减少堆栈指示器中的地址数。
亚马逊云科技在堆栈上的优势
- 云中可拓展存储:Amazon Simple Storage Service (Amazon S3) 是一种对象存储服务,可提供业界领先的可扩展性、数据可用性、安全性和性能。这意味着各种规模和行业的客户都可以使用它来存储和保护各种使用案例(例如湖内数仓、网站、移动应用程序、备份和还原、存档、企业级应用程序、IoT 设备和大数据分析)的任意量的数据。
- 云中的低成本归档存储:Amazon Glacier 是成本极低的存储服务,为数据存档和备份提供安全而持久的存储。为了降低成本,Amazon Glacier 专门针对不经常访问的数据以及可以接受数小时检索时间的数据进行了优化。利用 Amazon Glacier,客户可以可靠地存储大量或少量数据。
- PB 级数据传输:Amazon Snowball 是一种 PB 级数据传输解决方案,使用安全器件将大量数据输入亚马逊云科技云中,或从亚马逊云科技云中输出数据。使用 Snowball 解决大规模传输数据时遇到的常见问题,例如网络成本高、传输时间长,以及安全隐患等。使用 Snowball 传输数据非常简单、快速和安全,且传输成本可以低至使用高速网络传输数据成本的五分之一。
亚马逊云科技热门云产品
Amazon S3
为可从任何位置检索任意数量的数据而构建的对象存储
Amazon Glacier 存储类
云中的低成本归档存储
Amazon Snowball
迁移 PB 级数据集
欢迎加入亚马逊云科技培训中心
欢迎加入亚马逊云科技培训中心
-
快速上手训练营
-
账单设置与查看
-
动手实操
-
快速上手训练营
-
第一课:亚马逊云科技简介
本课程帮助您初步了解云平台与本地环境的差异,以及亚马逊云科技平台的基础设施和部分核心服务,包括亚马逊云科技平台上的弹性高可用架构,架构设计准则和本地架构迁移上云的基本知识。
亚马逊云科技技术讲师:李锦鸿第二课:存储与数据库服务
您将在本课程中学习到亚马逊云科技上的三个存储服务分别是什么。我们也将在这个模块中为您介绍亚马逊云科技上的关系型数据库服务 Amazon Relational Database Service (RDS)。
亚马逊云科技资深技术讲师:周一川第三课:安全、身份和访问管理
在这个模块,您将学习到保护您在亚马逊云科技上构建的应用的安全相关知识,责任共担模型以及身份和访问管理服务, Identity and Access Management (IAM) 。同时,通过讲师演示,您将学会如何授权给 EC2 实例,允许其访问 S3 上的资源。
亚马逊云科技技术讲师:马仲凯 -
账单设置与查看
-
-
动手实操
-
快速注册账号 畅享 40+ 免费云服务
快速注册账号 畅享 40+ 免费云服务
-
1 进入注册页面
-
2 设置用户名及密码
-
3 填写企业信息
-
4 企业信息验证
-
5 完成手机验证
-
6 选择支持计划
-
1 进入注册页面
-
01填写您注册账号的邮箱点击“继续”01填写您注册账号的邮箱点击“继续”03输入邮箱中收到的验证码点击“继续”03输入邮箱中收到的验证码点击“继续”注:该链接中的内容显示语言 是与您的网页浏览器设置相一致的,您可以根据需要自行调整语言栏。 *图片点击可放大
-
2 设置用户名及密码
-
3 填写企业信息
-
01填写公司联系人姓名全称01填写公司联系人姓名全称02填写公司联系人的联系电话02填写公司联系人的联系电话03填写公司名称*重要! ! !公司名称请务必与您所提供的营业执照公司名称保持一致03填写公司名称*重要! ! !公司名称请务必与您所提供的营业执照公司名称保持一致04填写公司办公地址省份/自治区/直辖市 - 城市 - 区 - 街道门牌号以及楼层信息 - 邮政编码04填写公司办公地址省份/自治区/直辖市 - 城市 - 区 - 街道门牌号以及楼层信息 - 邮政编码06您可以点击查看客户协议您可以点击查看客户协议勾选方框表示您已阅读,并同意客户协议的条款06您可以点击查看客户协议您可以点击查看客户协议勾选方框表示您已阅读,并同意客户协议的条款*图片可点击放大
-
4 企业信息验证
-
01在此上传企业注册执照01在此上传企业注册执照02请填写网络安全负责人的姓名
请注意: 该字段务必与您下方提供的身份证号匹配或与证件上的姓名保持一致
02请填写网络安全负责人的姓名请注意: 该字段务必与您下方提供的身份证号匹配或与证件上的姓名保持一致
03请填写网络安全负责人的联系方式有效的电子邮件地址 - 有效的中国内地 手机号码 - 座机号码(如无座机,请填写正确有效的手机号码)03请填写网络安全负责人的联系方式有效的电子邮件地址 - 有效的中国内地 手机号码 - 座机号码(如无座机,请填写正确有效的手机号码)04在此上传网络安全负责人的身份证件请注意:当您选择证件类型为“身份证”时,您需要填写正确的身份证号码,选择其他证件类型时,您需要上传证件扫描稿
04在此上传网络安全负责人的身份证件请注意:当您选择证件类型为“身份证”时,您需要填写正确的身份证号码,选择其他证件类型时,您需要上传证件扫描稿
*图片可点击放大 -
5 完成手机验证
-
6 选择支持计划