精华内容
下载资源
问答
  • C语言在内存中一共分为如下几个区域,分别是:1.内存栈:存放局部变量名;2.内存堆:存放new或者malloc出来的对象;3.常数:存放局部变量或者全局变量的值;...全局变量局部变量在内存里的区别?一个由c/C++
  • 特别行政区和民族区域自治地方区别
  • 8051内部128B的数据RAM,包括工作寄存器组、可直接位寻址区和数据缓冲。各区域的特性如下: (1)00H~1FH为工作寄存器组,共分4组,每组占用8个RAM字节单元,每个单元作为一个工作寄存器,每组的8个单元...
  • 全国行政区域中心坐标边界坐标集合,包含了全国95%以上的区域~ 高德坐标体系~~~重点说 是高德地图体系~GCJ-02体系
  • 对于刚开始接触AWS的用户而言,区域(Region)可用(Availability Zone,AZ)这两个概念有点不好理解。初次接触时往往不知道它们跟我们日常说的数据中心是什么关系。然而区域和可用是AWS中非常基础重要的...

       对于刚开始接触AWS的用户而言,区域(Region)和可用区(Availability Zone,AZ)这两个概念有点不好理解。初次接触时往往不知道它们跟我们日常说的数据中心是什么关系。然而区域和可用区是AWS中非常基础和重要的概念,因此我这里详细解释一下它们的一些来龙去脉。

     

    我们知道云服务底层的物质基础是数据中心,但是一方面由于AWS目前的规模已经比较庞大,另一方面AWS需要服务全球不同地区的用户,因此AWS在全球建立了许多数据中心。那如何来组织和设计这些数据中心,从而让用户能够更为可靠的使用AWS提供的云服务,同时满足他们在法规遵循方面的要求呢?AWS巧妙的采用了区域和可用区两层设计架构,而不是直接使用数据中心概念。实际上这是一种IT系统架构中常用的抽象和解耦的方式,只不过这是在更宏观更高的层次——把AWS云服务与底层物理数据中心进行了解耦设计。

     

    先来看一下区域(Region)概念。AWS云服务在全球不同的地方都有数据中心,比如北美、南美、欧洲和亚洲等。与此对应,根据地理位置我们把某个地区的基础设施服务集合称为一个区域。通过AWS的区域,一方面可以使得AWS云服务在地理位置上更加靠近我们的用户,另一方面使得用户可以选择不同的区域存储他们的数据以满足法规遵循方面的要求。在12月18日发布会之前全球有9个区域,包括:美东(北佛吉尼亚)、美西(俄勒冈)、美西(北加利佛尼亚)、欧洲(爱尔兰)、亚太(新加坡)、亚太(东京)、亚太(悉尼)、南美(圣保罗)和在美西服务政府的GovCloud区域。AWS中国(北京)区域将是亚马逊AWS在亚太地区的第4个区域,同时也是全球范围内的第10个区域。

     

    总的来说,AWS的不同区域之间是相对独立的,但是它们的独立程度与区域的类别有关。根据目前10个区域的各自特点我们可以把它们分成3个不同的类别。第一类是GovCloud区域,主要是服务美国的政府机构和部分美国客户。GovCloud满足ITAR和FedRAMP等规范,具有独立的用户管理体系。用户使用GovCloud区域的AWS服务需要专门的申请和审核流程,所以这个区域跟我们中国用户关系不大。第二类是中国区域,这也是一个与其他区域独立的专门服务中国客户的区域。中国区域采用了独立的用户账户体系,也就是说用户需要在中国(北京)区域的网站上申请账户来使用这里的服务。最后一类的是目前其他8个区域。这8个区域是面向所有用户的,且共享同一个账户体系,所以用户注册AWS账户后可以使用所有这8个区域的服务。对于那些需要同时使用AWS这8个区域和AWS中国区域的用户来说,他们同时需要两个账户——一个在中国的区域使用,另一个在其他8个区域使用。

     

    我们可以看出GovCloud区域和AWS中国区域都有自己独立的账户体系,与其他区域的服务是隔离的。对于其他8个区域,用户在不同区域存储的数据也都是相互独立的,也就是说AWS不会自动对用户数据进行跨区域的传输,这个对用户的法规遵循要求很重要。而且这8个区域的大部分AWS服务也是独立的,不过与中国区域和GovCloud区域完全独立不同的是有一些服务它们是共享的,比如它们共用一个账户体系和IAM服务,使用同一个AWS管理控制台,统一的Route53服务等。由于区域和区域之间相对独立,因此用户通过AWS管理控制台,CLI命令行和API操作AWS服务时,需要事先指定操作的对象是在哪个区域。以EC2的区域为例说明,每个区域都有自己对应的编码如下表所示:

    许多AWS用户同时使用了多个区域,因此为了方便用户进行跨区域使用和部署服务,AWS目前也开始提供一些跨区域的服务,比如跨区域的EC2 AMI拷贝、跨区域的EBS快照拷贝、跨区域的RDS读拷贝等。不要需要指出的是所有这些跨区域操作都需要用户自己发起,而且这些跨区域操作只能在前面所说的8个区域之间进行。

     

    AWS的每个区域一般由多个可用区(AZ)组成,而一个可用区一般是由多个数据中心组成。AWS引入可用区设计主要是为了提升用户应用程序的高可用性。因为可用区与可用区之间在设计上是相互独立的,也就是说它们会有独立的供电、独立的网络等,这样假如一个可用区出现问题时也不会影响另外的可用区。在一个区域内,可用区与可用区之间是通过高速网络连接,从而保证有很低的延时。AWS的区域与可用区的关系示意如下图所示:


    每次当用户需要使用EC2相关资源的时候,他需要首先选择目标区域,如美东(北佛杰尼亚)us-east-1。然后在创建EC2实例的时候,用户可以选择实例所在的可用区,比如可以是us-east-1a或us-east-1b等。可用区的编码就是区域后面顺序添加不同的英文字母。为了尽可能让不同用户平均分布在不同的可用区,一个用户选择的us-east-1a与另一个用户选择的us-east-1a可能不是同一个可用区,AWS后台会根据实际资源情况进行映射,但同一个用户选择的某个可用区前后是固定的。如果用户在创建EC2实例的时候没有选择可用区,那么AWS会自动选择一个合适的可用区。AWS建议用户在设计应用架构的时候尽可能的把他们的应用分布在不同的可用区上面,从而提升他们应用的高可用性。应用和服务的多可用区的部署也是实现高服务水平协议的一个重要手段和要求。

     

    展开全文
  • 区域(Region)可用(Availability Zone) 用区域(Region)可用(Availability Zone)来描述数据中心的位置,您可以在特定的区域、可用创建资源。 ...

    区域(Region)和可用区(Availability Zone)


    用区域(Region)和可用区(Availability Zone)来描述数据中心的位置,您可以在特定的区域、可用区创建资源。

    区域指物理的数据中心。每个区域完全独立,这样可以实现最大程度的容错能力和稳定性。资源创建成功后不能更换区域。

    可用区是同一区域内,电力和网络互相隔离的物理区域,一个可用区不受其他可用区故障的影响。一个区域内可以有多个可用区,不同可用区之间物理隔离,但内网互通,既保障了可用区的独立性,又提供了低价、低时延的网络连接。

    图1 阐明了区域和可用区之间的关系。

    图1  区域和可用区  
    1561105485420246.png

    目前,华为云已在全球多个地域开放云服务,您可以根据需求选择适合自己的区域和可用区。更多信息请参见 华为云全球站点

    如何选择区域?

    选择区域时,您需要考虑以下几个因素:

    • 地理位置

      一般情况下,建议就近选择靠近您或者您的目标用户的区域,这样可以减少网络时延,提高访问速度。不过,在基础设施、BGP网络品质、资源的操作与配置等方面,中国大陆各个区域间区别不大,如果您或者您的目标用户在中国大陆,可以不用考虑不同区域造成的网络时延问题。

      香港、曼谷等其他国家和地区提供国际带宽,主要面向非中国大陆地区的用户。如果您或者您的目标用户在中国大陆,使用这些区域会有较长的访问时延,不建议使用。

      • 在亚太地区有业务的用户,可以选择“亚太-香港”、“亚太-曼谷”或“亚太-新加坡”区域。
      • 在非洲地区有业务的用户,可以选择“南非-约翰内斯堡”区域。
      • 在欧洲地区有业务的用户,可以选择“欧洲-巴黎”区域。
    • 云服务之间的关系

      如果多个云服务一起搭配使用,需要注意:

      • 不同区域的弹性云服务器、关系型数据库、对象存储服务内网不互通。
      • 不同区域的弹性云服务器不支持跨区域部署在同一负载均衡器下。
    • 资源的价格

      不同区域的资源价格可能有差异,请参见 华为云服务价格详情

    如何选择可用区?

    是否将资源放在同一可用区内,主要取决于您对容灾能力和网络时延的要求。

    • 如果您的应用需要较高的容灾能力,建议您将资源部署在同一区域的不同可用区内。
    • 如果您的应用要求实例之间的网络延时较低,则建议您将资源创建在同一可用区内。

    区域和终端节点

    当您通过API使用资源时,您必须指定其区域终端节点。有关华为云的区域和终端节点的更多信息,请参阅 地区和终端节点




    About Me

    ........................................................................................................................

    ● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

    ● 本文在itpub( http://blog.itpub.net/26736162 )、博客园( http://www.cnblogs.com/lhrbest )和个人weixin公众号( xiaomaimiaolhr )上有同步更新

    ● 本文itpub地址: http://blog.itpub.net/26736162

    ● 本文博客园地址: http://www.cnblogs.com/lhrbest

    ● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

    ● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

    ● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

    ........................................................................................................................

    ● QQ群号: 230161599 (满) 、618766405

    ● weixin群:可加我weixin,我拉大家进群,非诚勿扰

    ● 联系我请加QQ好友 646634621 ,注明添加缘由

    ● 于 2019-06-01 06:00 ~ 2019-06-30 24:00 在西安完成

    ● 最新修改时间:2019-06-01 06:00 ~ 2019-06-30 24:00

    ● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

    ● 版权所有,欢迎分享本文,转载请保留出处

    ........................................................................................................................

    小麦苗的微店 https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

    小麦苗出版的数据库类丛书 http://blog.itpub.net/26736162/viewspace-2142121/

    小麦苗OCP、OCM、高可用网络班 http://blog.itpub.net/26736162/viewspace-2148098/

    小麦苗腾讯课堂主页 https://lhr.ke.qq.com/

    ........................................................................................................................

    使用 weixin客户端 扫描下面的二维码来关注小麦苗的weixin公众号( xiaomaimiaolhr )及QQ群(DBA宝典)、添加小麦苗weixin, 学习最实用的数据库技术。

    ........................................................................................................................

    欢迎与我联系

     

     



    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2648371/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/26736162/viewspace-2648371/

    展开全文
  • 浅谈堆、栈、堆、栈的概念和区别

    万次阅读 多人点赞 2019-10-21 15:45:15
    注:首先堆栈可以分为两种,一种是数据结构,另一种是内存的分配有关,这两种虽然都堆,但是两者关系并不大, 1、栈、堆是数据结构里面的叫法,注意:时候人喜欢这样说 "堆栈" 其实说的就是栈而不是...

    在以前小编我对于这几个名词真的是分不清,感觉好像都一样,因为概念很抽象,不知道大家有没有这样觉得,所以我觉得有必要要对它进行区分下,让大家对它起码有宏观的认识。

    一、区别

    注:首先堆和栈可以分为两种,一种是数据结构,另一种是和内存的分配有关,这两种虽然都有栈和堆,但是两者关系并不大,

    1、栈、堆是数据结构里面的叫法,注意:有时候有人喜欢这样说 "堆栈" 其实说的就是栈而不是堆。  

     2、堆区、栈区则是内存模型的叫法。

     

    二、内存中的栈区和堆区

    我们知道php的底层是C (任何语言其实都可以分为大同小异的几块)

    而C语言的内存模型分为5个区:栈区、堆区、静态区、常量区、代码区。每个区存储的内容如下:

    1、栈区:存放函数的参数值、局部变量等,由编译器自动分配和释放,通常在函数执行完后就释放了,其操作方式类似于数据结构中的栈。栈内存分配运算内置于CPU的指令集,效率很高,但是分配的内存量有限,比如iOS中栈区的大小是2M。

    2、堆区:就是通过new、malloc、realloc分配的内存块,编译器不会负责它们的释放工作,需要用程序区释放。分配方式类似于数据结构中的链表。“内存泄漏”通常说的就是堆区。

    3、静态区:全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后,由系统释放。

    4、常量区:常量存储在这里,不允许修改。

    5、代码区:顾名思义,存放代码。

     

    分布图:

     

    栈区和堆区大小差异?

    栈区:由图中其实可以知道,栈区是向低地址扩展的,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,大小在进程分配时是确定的,具体大小看编译器,操作系统。所需大小一般小于10M!太大没有意义,不符合栈是用来快速存取的目标。

    堆区:堆区是向高地址扩展的,是不连续的内存区域(这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的是动态分配的),因为会手动进行分配,会大一些,大小不固定。

    栈区和堆区效率差异?

    栈区:由系统自动分配,速度较快。但程序员是无法控制的。(只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。)

    堆区:是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。(首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的 delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中)

    小结:其实从上面的知识我们可以看出,如果存放在堆中的数据如果不进行释放,很可能造成内存泄漏,因为并不一定能触发gc机制回收。所以对于堆中的内存使用,我们要记得用完释放。

     

    三、数据结构中的栈和堆

    什么是数据结构?

    存储与组织数据的方式。我感觉更应强调数据的组织方式,比如好多数据结构的存储方式都是用的数组,但他们根据自身的特点进行了封装,因为存储方式只有顺序存储和链式存储两种,但是却可以组合成多种数据结构。 

     

    常用的数据结构有哪些?

    数组、栈、堆、队列、链表等等。

     

    栈是限定仅仅在表尾进行插入和删除操作的线性表,把允许插入和删除的一端称之为栈顶,另外一端称之为栈底。特点:后进先出,称之为后进先出线性表。

    栈的应用:递归。

     

    是一种经过排序的树形数据结构,每一个节点都有一个值,通常所说堆的数据结构是二叉树,堆的存取是随意的。所以堆在数据结构中通常可以被看做是一棵树的数组对象。而且堆需要满足一下两个性质:
    (1)堆中某个节点的值总是不大于或不小于其父节点的值;
    (2)堆总是一棵完全二叉树。

    堆的应用:堆排序,快速找出最大值、最小值,简化时间复杂度,像这样支持插入元素寻找最大(小)值元素的数据结构称之为优先队列

     

     

    展开全文
  • 动态存储静态存储区域区别

    万次阅读 多人点赞 2017-11-27 19:19:23
    3、全局(静态)(static)—,全局变量静态变量的存储是放在一块的,初始化的全局变量静态变量在一块区域, 未初始化的全局变量未初始化的静态变量在相邻的另一块区域。 - 程序结束后系统释放  4、...

    有关动态对象创建:一般来说,编译器将内存分为三部分:静态存储区域、栈、堆。静态存储区主要保存 全局变量和静态变量,栈存储调用函数相关的变量、地址等,堆存储动态生成的变量,在c中是指由malloc,free运算产生释放的存储空间,在c++中 就是指new和delete运算符作用的存储区域。

    1、  静态存储分配

    指在编译时对数据对象分配固定的存储位置,运行时始终不变。即一旦存储空间的某个位置分配给了某个数据名,则在目标程序的整个运行过程中,此位置(地址)就属于该数据名。
    由静态存储分配产生的数据区称为静态数据区。
    静态存储分配适用于不允许递归过程或递归调用,不允许可变体积的数据结构的语言
    静态存储分配的特点:简单、易于实现
    例:FORTRAN语言,它所有的数据都属于这一类。

    2、  动态存储分配

    指在运行阶段动态地为源程序中的数据对象分配存储位置
    实行动态存储分配的语言的特点:
    允许递归过程
    允许可变数据结构(可变数组或记录等)
    允许用户自由申请和释放空间
    这种程序在编译时无法确定运行时所需数据空间的大小,需待程序运行时动态确定
    有两种动态存储分配方式:栈式(stack)、堆式(heap)。

    3、  栈式动态存储分配

    在数据空间中开辟一个栈区,每当调用一个过程时,它所需要的数据空间就分配在栈顶,每当过程工作结束时就释放这部分空间。空间的使用符合先借后还的原则。
    特点:先借后还,管理简单,空间使用效率高
    栈式动态存储分配适合于PASCAL、C等典型过程式语言。

    4、  堆式动态存储分配

    在数据空间中开辟一片连续的存储区(通常叫做堆),每当需要时就从这片空间借用一块,不用时再退还。借用与归还未必服从“先借后还”的原则。
    堆式动态存储分配适合于用户可以自由申请和归还数据空间的语言,如C++。
    特点:适用范围广,容易出现碎片。
    如何充分利用空间是个难题。


    动态存储方式

    所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放。 典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配, 调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、 释放形参变量的存储单元。

    静态存储方式

    所谓静态存储方式是指在程序编译期间分配固定的存储空间的方式。该存储方式通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束。全局变量,静态变量等就属于此类存储方式。

    总结

    从以上分析可知, 静态存储变量是一直存在的, 而动态存储变量则时而存在时而消失。我们又把这种由于变量存储方式不同而产生的特性称变量的生存期。 生存期表示了变量存在的时间。 生存期和作用域是从时间和空间这两个不同的角度来描述变量的特性,这两者既有联系,又有区别。 一个变量究竟属于哪一种存储方式, 并不能仅从其作用域来判断,还应有明确的存储类型说明。

    内存中用户存储空间的分配情况(三种):

     程序区:存放程序语句

    静态存储区存放全局变量,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放。

    动态存储区:存放以下数据:函数形式参数。在调用函数时给形参分配存储空间;自动变量(未加static声明的局部变量;函数调用时的现场保护和返回地址等;

    就是那些由编辑器在需要的时候分配,在不需要的时候自动清除的变量的存储区,里面的变量通常是局部变量。函数参数等。

    就是那些右new分配的内存块,他们的释放编辑器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete.如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

    堆和栈的区别主要为:

    1.管理方式不同: 对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。

    2.能否产生碎片不同:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他

      们是如此的一一对应,以至于永远都不可能有一个内存块从栈中间弹出,在他弹出之前,在他上面的后进的栈内容已经被弹出

    3.生长方向:对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方向是向下的,是向着内存地址减小的方向增长。

    4.分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动  态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。

    5.分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会分到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多。 

    总结

    堆和栈相比,由于大量new/delete的使用,容易造成大量的内存碎片;由于没有专门的系统支持,效率很低;由于可能引发用户态和核心态的切换,内存的申请,代价变得更加昂贵。所以栈在程序中是应用最广泛的,就算是函数的调用也利用栈去完成,函数调用过程中的参数,返回地址,EBP和局部变量都采用栈的方式存放。所以,我们推荐大家尽量用栈,而不是用堆。   
    栈有如此众多的好处,但是由于和堆相比不是那么灵活,有时候分配大量的内存空间,还是用堆好一些。
    无论是堆还是栈,都要防止越界现象的发生(除非你是故意使其越界),因为越界的结果要么是程序崩溃,要么是摧毁程序的堆、栈结构,产生以想不到的结果,就算是在你的程序运行过程中,没有发生上面的问题,你还是要小心,说不定什么时候就崩掉,那时候debug可是相当困难的:)  

    以下转载一篇关于栈和堆的区别的文章

    来源:http://www.chinaitpower.com/2005September/2005-09-13/206685.html

    一、预备知识—程序的内存分配

    一个由c/C++编译的程序占用的内存分为以下几个部分 
    1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 
    2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 
    3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 
    4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放 
    5、程序代码区—存放函数体的二进制代码。 
    二、例子程序 
    这是一个前辈写的,非常详细 
    //main.cpp 
    int a = 0; 全局初始化区 
    char *p1; 全局未初始化区 
    main() 

    int b; 栈 
    char s[] = "abc"; 栈 
    char *p2; 栈 
    char *p3 = "123456"; 123456在常量区,p3在栈上。 
    static int c =0; 全局(静态)初始化区 
    p1 = (char *)malloc(10); 
    p2 = (char *)malloc(20); 
    分配得来得10和20字节的区域就在堆区。 
    strcpy(p1, "123456"); 123456放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。 

    二、堆和栈的理论知识 
    2.1申请方式 
    stack: 
    由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间 
    heap: 
    需要程序员自己申请,并指明大小,在c中malloc函数 
    如p1 = (char *)malloc(10); 
    在C++中用new运算符 
    如p2 = (char *)malloc(10); 
    但是注意p1、p2本身是在栈中的。 
    2.2 
    申请后系统的响应 
    栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。 
    堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。 
    2.3申请大小的限制 
    栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。 
    堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。 
    2.4申请效率的比较: 
    栈由系统自动分配,速度较快。但程序员是无法控制的。 
    堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便. 
    另外,在WINDOWS下,最好的方式是用VirtualAlloc分配内存,他不是在堆,也不是在栈是直接在进程的地址空间中保留一快内存,虽然用起来最不方便。但是速度快,也最灵活 
    2.5堆和栈中的存储内容 
    栈: 在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。 
    当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。 
    堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。 
    2.6存取效率的比较 

    char s1[] = "aaaaaaaaaaaaaaa"; 
    char *s2 = "bbbbbbbbbbbbbbbbb"; 
    aaaaaaaaaaa是在运行时刻赋值的; 
    而bbbbbbbbbbb是在编译时就确定的; 
    但是,在以后的存取中,在栈上的数组比指针所指向的字符串(例如堆)快。 
    比如: 
    #include <stdio.h> 
    void main() 

    char a = 1; 
    char c[] = "1234567890"; 
    char *p ="1234567890"; 
    a = c[1]; 
    a = p[1]; 
    return; 

    对应的汇编代码 
    10: a = c[1]; 
    00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh] 
    0040106A 88 4D FC mov byte ptr [ebp-4],cl 
    11: a = p[1]; 
    0040106D 8B 55 EC mov edx,dword ptr [ebp-14h] 
    00401070 8A 42 01 mov al,byte ptr [edx+1] 
    00401073 88 45 FC mov byte ptr [ebp-4],al 
    第一种在读取时直接就把字符串中的元素读到寄存器cl中,而第二种则要先把指针值读到edx中,在根据edx读取字符,显然慢了。

     
    2.7小结: 
    堆和栈的区别可以用如下的比喻来看出: 
    使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。 
    使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。 

    堆和栈的区别主要分: 
    操作系统方面的堆和栈,如上面说的那些,不多说了。 
    还有就是数据结构方面的堆和栈,这些都是不同的概念。这里的堆实际上指的就是(满足堆性质的)优先队列的一种数据结构,第1个元素有最高的优先权;栈实际上就是满足先进后出的性质的数学或数据结构。 
    虽然堆栈,堆栈的说法是连起来叫,但是他们还是有很大区别的,连着叫只是由于历史的原因。

    展开全文
  • 区别于以往的区域高新技术产业集群竞争力评价研究,文中主要强调了集群与核心企业竞争力对区域经济增长潜力的影响。从核心企业竞争力、人力资本竞争力、集群竞争力、基础竞争力等4个方面构建了区域高新技术产业集群...
  • 进程线程的区别(超详细)

    万次阅读 多人点赞 2019-10-03 21:57:46
    进程线程 进程 一个在内存中运行的应用程序。每个进程都自己独立的一块内存空间,一个进程可以多个线程,比如...与进程不同的是同类的多个线程共享进程的堆方法资源,但每个线程自己的程序计数器、虚拟...
  • 为解决古山三井综放工作面采空自燃防治及危险区域划分的难题,并探究采用温...采用温升率氧气体积分数法划分采空氧化危险区域时两种方法之间存在着较大的差别,以温升率在0~1℃/d作为氧化升温带的划分标准更为合理.
  • 阿里云云服务器选择不同地域有什么区别
  • Cadence Allegro 如何设定布线区域和器件布局区域 Route keepout Route keepin区别: Route keepout是指在范围允许布线; Route keepin是指在范围不允许布线; Package keepinPackage keepout区别: ...
  • 临界资源临界区别

    千次阅读 2020-07-21 07:57:32
    临界资源临界区别 1.临界资源是一种系统资源,需要不同进程互斥访问,而临界则是每个进程中访问临界资源的一段代码,是属于对应进程的,临界前后需要设置进入区和退出以进行检查恢复。临界区和临界...
  • OSPF骨干区域和非骨干区域通信

    千次阅读 2020-08-05 18:57:06
    第一步:配置IP地址 R1 undo terminal ...id 4.4.4.4 [R4-ospf-1]area 2 [R4-ospf-1-area-0.0.0.2]network 10.1.3.0 0.0.0.255 [R4-ospf-1-area-0.0.0.2]network 4.4.4.4 0.0.0.0 如果不会配置骨干区域下面链接: ...
  • 传输区域:除了承载本区域发起的流量访问本区域的流量外,还承载了源IP目的IP都不属于本区域的流量,即“穿越型流量”,如Area 0。 末端区域:只承载本区域发起的流量访问本区域的流量,如Area 1。 对于...
  •  1、栈(stack)  由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。   2、堆(heap)  一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收...
  • 高德 地图 全国 行政区域 编码 省市县乡 数据库 高德 地图 全国 行政区域 编码 省市县乡 数据库
  • Java - 锁监视器有什么区别

    万次阅读 2019-08-19 16:49:31
    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!... 要回答这个问题,你必须深入理解Java的多线程底层是...JVM中的每个对象都一个锁(或互斥锁),任何程序都可以使用...
  • 什么是临界资源临界

    万次阅读 多人点赞 2016-12-29 16:22:45
    软件消息队列,变量,数组,缓冲等。诸进程间采取互斥方式,实现对这种资源的共享。 2.临界:  每个进程中访问临界资源的那段代码称为临界(criticalsection),每次只允许一个进程进入...
  • OSPF单区域通信(骨干区域

    千次阅读 2020-08-02 17:55:08
    协议区别 关于起源 版本介绍 链路状态 OSPF几个状态 OSPF的类型 简单OSPF配置 基本配置 配置OSPF路由协议 什么是OSPF ? ospf(Interior Gateway Protocol,简称IGP)是一个内部网关协议,用于在单一自治系统...
  • jvm的内存模型 颜色jvm运行时数据上面的一致就代表那个区域, Heap(Java堆) 几乎所有对象实例和数组都要在堆上分配(栈上分配、标量替换除外), 因此是VM管理的最大一块内存, 也是垃圾收集器的主要活动区域....
  • Java内存区域介绍(附带JDK1.8后方法的变化)

    千次阅读 多人点赞 2019-07-13 13:51:23
    一、运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。根据《Java虚拟机规范(JavaSE7版)》的规定,java虚拟机所管理的内存将会包括以下几个运行时数据区域,如图所...
  • 云服务器的地域(Region)是指物理的数据中心的地理区域。不同地域之间完全隔离,保证不同地域间最大程度的稳定性容错性。为了降低访问时延、提高下载速度,建议选择最靠近客户的地域。 可以查看下表或者通过 API ...
  • 这篇跟大家分享正反向查找区域的操作。系统镜像下载链接:https://pan.baidu.com/s/114IKLwYoDFtI3vOnudmV9Q首先大家准备一个Windows server版本的服务器,自行安装好系统安装好后打开【服务器管理器】找到【管理】...
  • S7中数据类型INTWord有什么区别

    千次阅读 2020-05-24 07:11:44
    S7中数据类型INTWord有什么区别吗 分类:博途 S7中数据类型INTWord有什么区别吗 1、WORD是无符号的数据类型;INT是符号的数据类型(最高位为1表示负数,0表示正数)。 通常情况下WORD用于逻辑运算,INT用于...
  • 堆(heap)栈(stack)有什么区别?

    千次阅读 2019-01-09 22:18:31
    (1)虚拟机执行Java代码时,首先要把字节码文件加载到内存,那么这些类的信息都存放在哪个区域呢? (2)当我们创建一个对象实例的时候,虚拟机要为对象分配内存,虚拟机是如何分配内存的呢? 2.Java内存模型...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 182,009
精华内容 72,803
关键字:

区和区域有什么区别