面象对象与面象过程内存分区
离开内存分配谈语法机制都是在扯淡
声明:禁止以任何形式的转载!!!
一、面象过程:比如C语言(内存四区)
1.堆与全局的区别:只要不手动释放在程序运行期间变量空间始终存在。
但是全局区的变量不能由程序员释放,而堆中的空间可以通过free()函数释放。
常量区中的对象不可变:比如
char *p="hello world";
p[0]='y';
显然程序通过下标的方法去将"hello world"中的h改为y,显然这是对内存分配的无知,p这个变量在栈中,而"hello world"是一个字面常量,在常量区中,常量区中的空间是只读,不可以通过程序写入数据的。p这个指针变量只不过是保存
"hello world"这个字符串在常量区的首地址。并没有在栈中开辟空间来存这个字符串。但是你可以:p[0]去读取'h'(可读)而:
char p[20]="hello world";
p[0]='y';
这是可以的,因为p[20]表示在栈中开辟了一个数据来存这个字符串,栈中的空间是可修改的。
二、面象对象:的虚拟机
栈:在方法体中定义的变量都是在栈中,包括值类型与引用类型。在栈中的引类型,系统分配空间,这个可空间可以放任意合法的数据。而栈中的引用类型,它没有存放数据的空中,但是在栈中为引用类型分配一个保存对象的引用,这个栈中的引用只能放地址。
堆:所有通过new调用构造方法就会在堆中开辟空间,前面说过,在栈中开辟的空间用于保存指向堆中对象的地址,那么堆中的对象就是用于存放数据的空间,系统为对象中堆中开辟存放数据的空间,这个对象包括成员字段和指向成员函数的函数指针(这是站在C语言的角度来看,毕竟高级与语的底层是C/C++)
String s="hello world";//这个字符串同样在方法区的常量池中,常量池中的空间在程序运行期间是只读的,这就是为什么说字符串对象是不可变的。
String s=new String("hello world");//图上说过,通过new和构造就会在堆上开辟空间,用来存这个字符串,此时,这个字符串是可变的,因为堆区空间的可读可写的。在面象对象的语言中也有结构其语法和类相类,但是最本质的区别的类是引用类型,而结构是值类型,结构不会在堆中开辟空间来存放成员,而是在栈中开辟一段连续的空间来存放(这是站在C的角度来看,但是C#也好,Java也好,底层,都是用C/C++写的)
转载于:https://www.cnblogs.com/chaeyeon/p/6144434.html
面象对象与面象过程内存分区相关推荐
- 细谈 对象的初始化过程------内存中的实现过程?
今天对于内存的理解 又加深了一步: 对下面代码的理解: [html] view plaincopyprint? class Person { private String name="xia ...
- 面象对象设计6大原则之三:里氏替换原则
转载自 面象对象设计6大原则之三:里氏替换原则 里氏替换原则(LSP),The Liskov Substitution Principle 定义 所有引用基类的地方必须能透明地引用其子类的对象,即子类 ...
- 对面象对象概念的理解、解释
写在前面的话: 由于工作原因已经半年多没好好理下Java了,现在因换工作需要重新复习一下Java.以前一直想把自己在Java方面的学习心得写出来,现在终于算是有些时间了,那么开始吧. 这一篇讲对象(O ...
- 一木.溪桥学Python-11:迭代器、生成器、面象对象class MyClass:、self 参数、 __init__() 方法、__str__() 方法
一木.溪桥 在Logic Education跟Amy学Python 逻辑教育 :https://logicedu.ke.qq.com 12期:Python基础课 一木.溪桥学Python-11:迭代器 ...
- 【推荐】JS面象对象编程视频教程
一.JS面象对象编程(上) 二.JS面象对象编程(中) 三.JS面象对象编程(下) 转载于:https://www.cnblogs.com/artwl/archive/2011/07/24/21155 ...
- 从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的?
转载自 从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的? 先回顾一下Java程序执行的过程: Java程序执行时,第一步系统创建虚拟机进程,然后虚拟器用类加载器Class Loade ...
- 面象对象设计6大原则之六:迪米特原则
转载自 面象对象设计6大原则之六:迪米特原则 迪米特原则(LOD),The Law Of Demeter,也称为最少知识原则 定义 一个对象应该对其他对象有最少的了解. 也就是说一个类耦合和调用一个类 ...
- 面象对象设计6大原则之五:依赖倒置原则
转载自 面象对象设计6大原则之五:依赖倒置原则 依赖倒置原则(DIP),The Dependency Inversion Principle 定义 1.高层模块不应该依赖低层模块,两都应该依赖于抽象. ...
- 面象对象设计6大原则之四:接口隔离原则
转载自 面象对象设计6大原则之四:接口隔离原则 接口隔离原则(ISP),The Interface Segregation Principle 定义 客户端不需要强迫依赖那些它们不需要的接口. 类与接 ...
- 面象对象设计6大原则之二:开放封闭原则
转载自 面象对象设计6大原则之二:开放封闭原则 开放封闭原则(OCP),The Open Closed Principle 定义 一个软件的实体,包括类.方法.模块.应该对扩展开放,对修改关闭. 也就 ...
最新文章
- 内存缓存LruCache的简单使用
- 聊聊WEB系列_Index
- C Primer Plus 第6章 C控制语句:循环 6.9 选择哪种循环
- Exchange2010配置-设置OWA身份验证及重定向
- android 手机关机代码非root,怎么用代码判断android手机是否开启了ROOT 权限知道...
- 如何计算Java对象所占内存的大小
- linux内核参数的程序,技巧-Linux内核参数调整办法
- SSH整合方案二(不带hibernate.cfg.xml)
- python全栈索引
- 李宏毅机器学习——迁移学习
- 这14个Java核心并发容器,Java高手和低手的区别点
- 美团打车已攻到北京,滴滴还在忙着收小蓝单车?
- 判断网页是否是微信浏览器打开
- API 函数 MultiByteToWideChar 实现各类编码转换
- 基于Web的通用BBS系统的建立与维护
- 深入浅出MFC.pdf
- 基于SIFT特征提取的图像拼接算法matlab仿真
- 微信emoji表情及输入法自带表情存储与显示
- html banner广告代码,jquery实现的Banner广告收缩效果代码
- docker中mysql忘记密码怎么办?
热门文章
- 苹果python执行不了,Python调用的AppleScript不使用osascript或appscript?
- ruby分割字符串_Ruby中常用的字符串处理函数使用实例
- 自动驾驶1-5: 感知要求Requirements for Perception
- 容器技术Docker K8s 25 容器服务ACK基础与进阶-监控管理
- 算法:平衡二叉树110. Balanced Binary Tree
- 算法:投票Voting
- 易筋SpringBoot 2.1 | 第廿四篇:SpringBoot访问Docker中的MongoDB
- 最大似然参数估计的求解
- java中如何访问类中的字段_java – 在子类中使用super关键字访问超类私有字段
- eda多功能时钟设计_Altera FPGACPLD设计 基础篇+高级篇(附随书光盘)