JAVAc++中char和char[]的区别

(2011-05-17 09:25:45)

标签:

杂谈

地方。

但是留意p1、p2自身是在栈中的。

2. 2申请后系统的响应

栈:只要栈的剩余空间大于所申请空间, 系统将为顺序提供内存, 否则将报异常提示栈溢出。

堆:首先应该晓得操作系统有一个记录闲暇内存地址的链表, 当系统收到顺序的申请时, 会遍历该链表,

寻找第一个空间大于所申请空间的堆结点, 然后将该结点从闲暇结点链表中删除, 并将

该结点的空间分配给顺序, 另外, 对于大少数系统,

会在这块内存空间中的首地址处记录本次分配的大小?庋?代码中的delete语句才干正确的释放本内存空间。 另外,

由于找到的堆结点的大小不一定正

好等于申请的大小?低郴嶙远慕嘤嗟哪遣糠种匦路湃胂邢玖幢碇小?

2. 3申请大小的限制

栈:在

存储的闲暇内存地

址的, 自然是不延续的, 而链表的遍历方向是由低地址向高地址。 堆的大小受限于计算机系统中有效的

虚拟内存。 由此可见, 堆获得的空间比拟灵敏, 也比拟大。

2. 4申请效率的比拟:

栈:由系统自动分配, 速度较快。 但顺序员是无法控制的。

堆:是由new分配的内存, 普通速度比拟慢, 而且容易产生内存碎片, 不过用起来最方便。

另外, 在windows下, 最好的方式是用virtualalloc分配内存, 他不是在堆, 也不是在栈,

而是直接在进

程的地址空间中保存一块内存, 虽然用起来最不方便。 但是速度快, 也最灵敏。

2. 5堆和栈中的存储内容

栈:在函数调用时, 第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的

JAVA地址, 然后是函数的各个参数, 在大少数的c编译器中, 参数是由右往左入栈的, 然后是函数中的局部变

量。 留意静态变量是不入栈的。

当本次函数调用完毕后, 局部变量先出栈, 然后是参数, 最后栈顶指针指向最开始存的地址, 也就是主

函数中的下一条指令, 顺序由该点继续运转。

堆:普通是在堆的头部用一个字节寄存堆的大小。 堆中的详细内容由顺序员布置。

2. 6存取效率的比拟

但是, 在以后的存取中, 在栈上的数组比指针所指向的字符串(例如堆)快。

比如:

对应的汇编代码

第一种在读取时直接就把字符串中的元素读到寄存器cl中, 而第二种则要先把指针值读到edx中, 在根据

edx读取字符, 显然慢了。

堆和栈的区别可以用如下的比喻来看出:

运用栈就象我们去饭馆里吃饭, 尽管点菜(发出申请)、付钱、和吃(运用), 吃饱了就走,

不必理会切菜、洗菜等准备任务和洗碗、刷锅等扫尾任务,饱腹减肥饼干 他的好处是快捷, 但是自由度小。

运用堆就象是自己入手做喜欢吃的菜肴, 比拟麻烦, 但是比拟契合自己的口味, 而且自由度大。

自我总结:

charc1="abc";实际上先是在文字常量区分配了一块内寄存"abc", 然后在栈上分配一地址给c1并指向

这块地址, 然后改变常量"abc"自然会解体

但是charc2[]="abc", 实际上abc分配内存的地方和上者并不一样, 可以从

2293624看出, 完全是两块地方, 推断4199056处于常量区, 而2293624处于栈区

2293620这段输入看出三个指针分配的区域为栈区, 而且是从高地址到低地址

继续思考:

代码:

分享:

喜欢

0

赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

java Char与char_JAVAc++中char和char[]的区别相关推荐

  1. mysql int char连接_MySQL中int、char以及varchar的性能比较

    软件安装:装机软件必备包 SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出& ...

  2. java零碎要点---struts2中redirect和redirectAction的区别

    struts2中redirect和redirectAction的区别 struts2中关于result的返回类型一般我们是转发到一个jsp页面或者是html页面等,但是struts2中的result的 ...

  3. java字节字符_java中字符和字节的区别

    byte(字节): byte即字节的意思,是java中的基本数据类型,用来申明字节型的变量,一个字节包含8个位,所以,byte类型的取值范围是-128到127. 通常在读取非文本文件时(如图片,声音, ...

  4. java中输入char类型_java中如何输入char类型

    java中基本数据类型的输入包括整形的输入:in.nextInt();单精度浮点型:in.nextFloat();双精度浮点型:in.nextDouble();字符串类型:in.next();in.n ...

  5. mysql的to char data_数据库中的to char

    Oralce中设置小数点位数 假如数据库中有一个字段为zdt8,是数值类型的,即使是数字0,也想显示成0.00,则使用to_char函数转换一下 to_char(NVL(zdt8,0.00),'fm9 ...

  6. java error与exception_Java中Error与Exception的区别

    Error类和Exception类都继承自Throwable类. Error的继承关系: Exception的继承关系: 二者的不同之处: Exception: 1.可以是可被控制(checked) ...

  7. java 静态内部类 内部类_Java中内部类和静态内部类的区别

    内部类和静态内部类 示例 public class OuterClass { private int numPrivate = 1; public int numPublic = 2; public ...

  8. java long 和long_java中Long和long的区别

    之前做项目的时候多少接触了这个问题.只是一直没用到这个类型,写的项目都是一些很小的,数据量很少.今天给项目大框架的时候发现,数据库(Oracle)里面Number类型的长度为10以下的时候,如果使用m ...

  9. java thread和runnable_java中thread和runnable的区别

    展开全部 线程的起动62616964757a686964616fe4b893e5b19e31333361326332并不是简单的调用了你的RUN方法,而是由一个线程调度器来分别调用你的所有线程的RUN ...

最新文章

  1. 服务器测速,php在线测速
  2. React-Amap-HOC组件封装
  3. 深度挖掘 Laravel 生命周期
  4. ruby的optparse使用小记
  5. python大数据招聘信息_2017招聘大数据丨Python需求增速达174%,AI人才缺口超百万!...
  6. python简单程序实例-python实现的简单窗口倒计时界面实例
  7. filter-policy应用实验(华为设备)
  8. 升级Xcode8后需要添加的一些权限
  9. atitit.提升开发效率---MDA 软件开发方式的革命(3)----自动化建表
  10. 同一网络下的两台计算机怎样共享,同一路由器上的两台计算机如何共享文件?...
  11. cf虚拟服务器设置方法,CF和GA免费顶级域名申请注册及修改DNS域名解析方法
  12. 微信小程序上传Excel文本文件功能
  13. IntelliJ IDEA 项目相关的几个重要概念介绍
  14. SpringCache整合EhCache2和EhCache3(JCache)
  15. A Knight‘s Journey(POJ-2488)
  16. Android 多厂商推送集成
  17. 人工智能时代,人类何去何从?
  18. 【运动控制】运动控制卡与PLC的区别
  19. argument详解
  20. 阿里云对象存储-图片存储

热门文章

  1. 第一章、计算机网络与英特网(重点知识梳理)
  2. windows快捷键+组合键+搜索命令
  3. IP-guard内网安全解决方案
  4. js插件动态加载js、css解决方案
  5. 物联网网关关键技术包括两个方面,物联网网关是智能家居发展的重要支撑
  6. vue 点击获取当前时间上/下周 整周数据
  7. 怎么禁止电脑端的爱番番弹窗出现?
  8. Javaweb-请求报500问题
  9. 【论文笔记】YOLOv4: Optimal Speed and Accuracy of Object Detection
  10. 【偶像大师 白金星光】的【Variable Tone】技术大公开!偶像从哪里看都那么可爱,VA小组谈制作方针...