因为看完汇编语言一书后,对C语言的理解更深了一个层次。以及平时用java的架构开发web,对java的内存问题也有一定的了解。因此特地的写一篇关于内存的博客。仅提供给自己看,以及不是大神而是与我一般水平的人员阅读。


汇编的内存分配

以8086CPU为例子(我也只学过8086的),可以由自己分配数据段,以及任何一个内存单元都可以作为数据对的存储。而在内存单元中的数值分别代表的是指令或者是数据。二者必居其一,不可量不可也!


C/C++内存分配

C/C++分配内存空间分为三种,一种是用栈的内存空间,一种是用堆的内存空间,还有一个是静态存储区。

三者的区别是在于:

  1. 栈内存:由于栈的空间比较小,所以访问速度快(栈空间也是用我们的RAM空间)
  2. 堆内存:RAM中任意一块内存空间被占用(一般在new的时候会这样)
  3. 静态存储区:一般是在编译和预编译的时候指定的固定内存空间,所以访问速度是最快的

一般情况下,C/C++的在定义静态的变量和方法的时候会将它们存储到静态存储区中;在定义全局变量以及局部变量的时候将它们存储到栈内存中;当使用new的时候将它们存储在堆内存而将这个引用的地址存储在栈中。


JAVA内存分配

JAVA分配内存空间也是三种,堆栈,堆,静态存储区。

三者的区别:

  1. 堆栈:存储着对象的引用(地址)
  2. 堆:是new出来的(也只能是这样)
  3. 静态存储区:与C/C++一样

最后垃圾回收器根据引用计数器等一系列回收方式将没有存在引用的对象销毁。


方法区

没错,这3种语言都是存储方法的首地址。访问方法的首地址来执行相应的方法。


主函数

对汇编而言,主函数不一定要为main,而是CS、IP开始执行的位置。C/C++还有JAVA在一般(也就是约定俗成的情况下)主函数的入口就是main。

对于main方法而言,它其实也是一个方法的首地址(入口地址)。


反思想

我们可以通过对C/C++的重写构造,使之成为一个让人"看不懂"而功能又是一样的程序。因为变量就是地址,而方法也是首地址。完全可以通过改变地址去调用任何你想调用的方法。也就是说,如果同时运行两个程序,你知道其中一个程序中的子程序的首地址,那你完全可以C语音编程调用这个子程序。因为它们都只是内存地址而已。


结尾

以上都是自己的猜想。

关于汇编跟C/C++已经java的内存理解相关推荐

  1. 汇编和python-现在是Java和Python的时代,有谁还需要C以及汇编呢?

    有人认为,现在是Java和Python的时代,有谁还需要C以及汇编呢?殊不知,Java和Python是建立在软件之上的,是为了垄断市场而建立起来的体系,犹如挖好一个金碧辉煌的坑,请你往下跳,还自以为站 ...

  2. java 汇编_大话+图说:Java 汇编指令——只为让你懂

    原标题:大话+图说:Java 汇编指令--只为让你懂 前言 随着Android开发技术不断被推到新的高度,对于Android程序员来讲越来越需要具备一些对深入的基础性的技术的理解,比如说Java汇编指 ...

  3. java——JMM内存模型

    目录 简介 三大特性 volatile关键字 简介 JMM内存模型,也称为Java多线程内存模型.它和cpu缓存模型类似,是基于cpu缓存模型来建立. cpu缓存模型: java内存模型: 当Java ...

  4. 内存屏障与java的内存屏障 —— JVM篇

    内存屏障与java的内存屏障 内存屏障 前言 一.什么是内存屏障? 二.volatile变量规则 1.volatile简介 2.volatile原理 3.volatile特性 4.volatile变量 ...

  5. Java的内存模型是什么

    Java的内存模型是什么 1.Java内存区域 Java虚拟机在运行程序时会把其自动管理的内存划分为以上几个区域,每个区域都有的用途以及创建销毁的时机,其中蓝色部分代表的是所有线程共享的数据区域,而绿 ...

  6. java查看内存地址_Java内存机制和内存地址

    问题一: String str1 = "abc"; String str2 = "abc"; System.out.println(str1==str2); / ...

  7. java 全局变量 内存不回收_Java的内存 - 内存回收

    这篇承接上一篇 <Java的内存 - 内存模型>,分析内存回收相关的知识点. 垃圾回收包含两个步骤,①标记哪些内存是垃圾 ②回收内存.下面分别说这两个步骤有哪些算法: 1. 垃圾标记 1. ...

  8. 安卓 java内存碎片_理解Android Java垃圾回收机制

    Jvm(Java虚拟机)内存模型 从Jvm内存模型中入手对于理解GC会有很大的帮助,不过这里只需要了解一个大概,说多了反而混淆视线. Jvm(Java虚拟机)主要管理两种类型内存:堆和非堆. 堆是运行 ...

  9. 软件测试学java,软件测试学习Java的内存模型

    原标题:软件测试学习Java的内存模型 软件测试学习Java的内存模型 主内存与工作内存 定义程序中各个变量的访问规则. 规定JVM必须遵循的最小保证. 定义操作的偏序关系.Happens-Befor ...

最新文章

  1. au加载默认的输入和输出设备失败_Mac OS X的音频输入输出时如何调整音量
  2. A02 创建实验环境快照
  3. perl(Class::MethodMaker) is needed by MySQL-ndb-tools-5.1.21-0.glibc23.i386
  4. matlab安装第三方库,Matlab调用cpp+第三方库
  5. Java读取文件中的arraylist_java – 从文件中读取ArrayList作为对象?
  6. 敏捷开发用户故事系列之一:何为用户故事
  7. C++ 实现一个简单内存池
  8. 深入浅出BP神经网络(反向传播算法)
  9. 上传图片并实现本地预览(1)
  10. rslinx连接linux教程,RSLinx Classic软件通讯配置教程
  11. IFI Claims:2018年中国企业在美国申请专利数量7298件
  12. FastReport VCL如何在 Lazarus安装FastReport
  13. Linux修改只读文件权限
  14. 【论文阅读】Pothole Detection Based on Disparity Transformation and Road Surface Modeling
  15. 计算机自定义桌面,如何自定义电脑桌面的图标显示
  16. 计算机中汉字的顺序用什么牌,中国汉字的写做顺序,你知道吗?
  17. 为啥214被塞狗粮的单身汪,520还会被塞狗粮
  18. 微信小程序demo1计算器
  19. 在outlook中批量导入MSG文件
  20. explorer被微信企业版劫持一例

热门文章

  1. python操作docx学习资料
  2. Spring 事情具体详尽的解释
  3. 命令行下django-admin.py参数不起作用的问题解决
  4. HDU 2897 邂逅明下(简单博弈)
  5. 系统安装操作优化:chapter 3 安装windos操作系统。
  6. matlab实现将一个文件夹里面的pcm文件依次合并成一个信号的函数
  7. JVM学习01总体概述
  8. [云炬创业管理笔记]第九章为创业成败而准备测试2
  9. 国学早教视频 16G
  10. [云炬创业基础笔记]第六章商业模式测试7