目录​​简介​​​​重排序​​​​写的内存屏障​​​​非lock和LazySet​​​​读的性能​​​​总结​​简介Volatile关键字对熟悉java多线程的朋友来说,应该很熟悉了。Volatile是JMM(Java Memory Model)的一个非常重要的关键词。通过是用Volatile可以实现禁止重排序和变量值线程之间可见两个主要特性。今天我们从汇编角度来分析一下Volatile关键字到
原创 2022-09-19 17:14:36
258阅读
文章目录简介一个普通的virtual call普通方法中的null check反优化的例子总结简介之前我们在讲Virtual call的时候有提到,virtual call方法会根据传递的参数实例的不同而进行优化,从而优化成为classic call,从而提升执行效率。今天我们考虑一下,在virtual call中执行nullcheck的时候
原创 2021-04-20 12:04:35
154阅读
1点赞
文章目录简介重排序写的内存屏障非lock和LazySet读的性能总结简介Volatile关键字对熟悉java多线程的朋友来说,应该很熟悉了。Volatile是JMM(Java Memory Model)的一个非常重要的关键词。通过是用Volatile可以实现禁止重排序和变量值线程之间可见两个主要特性。
原创 2021-04-20 12:04:56
141阅读
1点赞
先观察一下的代码: #include<stdio.h> int main(){ const int i=1; int y; int *pi=(int*)&i; *pi=2; y=*pi; int tempi; tempi=i; printf("i=%d\n",i); printf("tempi=%d
转载 2013-11-24 11:14:00
124阅读
目录​​简介​​​​一个普通的virtual call​​​​普通方法中的null check​​​​反优化的例子​​​​总结​​简介之前我们在讲Virtual call的时候有提到,virtual call方法会根据传递的参数实例的不同而进行优化,从而优化成为classic call,从而提升执行效率。今天我们考虑一下,在virtual call中执行nullcheck的时候,如果已经知道传递的
原创 2022-09-19 16:44:33
96阅读
知识回顾:调用函数就会在栈上形成栈结构,栈整体是向地址减小方向增长的,每次调用一个函数就是形成栈帧的过程,返回函数就是释放栈帧的过程(释放不等于把空间清空,而是设置空间无效,意味着下次再重新调用函数是可以覆盖上次的栈帧结构)局部变量的临时性:局部变量的空间开辟是在对应函数的栈帧结构内开辟的,函数返回时,栈帧结构被释放,变量也会被释放。临时变量是在对应函数栈帧内形成的,临时变量的临时性是因为栈帧是临
原创 精选 2023-07-24 09:13:44
245阅读
1点赞
✨CAS全称"Compare And Swap",也就是"比较并替换";它涉及三个操作数:内存值、预期值、新值。只有当内存值和预期值一致时,才能将内存值修改为新值。?CAS操作具有原子性,它的原子性由CPU硬件指令来保证;在HotSpot中...
原创 2022-07-11 06:22:20
242阅读
float是占用四个字节,double是栈用8个字节的。 float a=5; double b=5; printf("%lf",a+b); return 0; 对应的汇编代码 00401028 |. C745 FC 0000A>mov [local.1],0x40A00000 0040102F | ...
转载 2021-10-22 10:55:00
300阅读
2评论
C++编译器:运行结果:C编译器:运行结果:下面我从汇编角度来解释一下:在C++编译器中,把*p和i认为是不同的类型(*p是变量,i是常量),这样,*p改变,i不变,也就是两个不同类型的数据存入了同一个存储单元中(在相同的物理地址下存了两个值)。在C编译器中,把*p和i认为是相同类型(同是变量),这样,*p改变,i随之改变,就相当于先给i赋值100,再给i赋值200。
原创 2022-01-05 16:38:20
90阅读
虚拟内存布局关于进程在虚拟内存的布局,一张经典的解释图是:在一段完整的汇编程序中,我们首先要关注的是其实是图中的stack部分,它是一个地址向低位生长的栈理解一段简单的汇编想要分析汇编程序,
原创 2022-04-27 22:36:16
271阅读
1.动机:前段时间,一直有个疑问,就是编译器是从哪里知道数据的类型的,数据的类型是存在内存里面的么,因为自己调试编译器,发现内存中并没有多余的数据,后来在群上发问,才知道数据在编译成汇编的过程就知道数据的类型了,也就是数据的类型识别时在内存代码区里 观察代码#include#includestruct data{ short a; long b; long long c; float e; double f; double g; bool h; char i;};int main(){ data temp; temp.a...
转载 2013-11-24 10:26:00
94阅读
2评论
汇编角度理解程序(二)—— 分支和循环控制 在上一节 从汇编角度理解程序(一)—— 操作数据的指令流 中提到,程序其实就是按顺序执行的操作寄存器数据的指令流。 不过,按顺序执行的指令流是如何实现程序中常见的分支和循环功能的呢? 简单地说,就是有条件的跳转 —— 依据条件寄存器和跳转指令实现,非
转载 2019-03-18 15:18:00
77阅读
2评论
文章目录简介本地变量的生命周期举例说明优化的原因总结简介java方法中定义的变量,它的生命周期是什么样的呢?是不是一定要等到方法结束,这个创建的对象才会被回收呢?带着这个问题我们来看一下今天的这篇文章。本地变量的生命周期在类中,变量类型有类变量,成员变量和本地变量。
原创 2021-04-20 12:07:08
101阅读
1点赞
简介 java方法中定义的变量,它的生命周期是什么样的呢?是不是一定要等到方法结束
原创 2022-09-19 16:45:47
48阅读
MSP430汇编: 1、MOV,MOVX,MOVC区别和用法 MOV就是移动的意思,C就是Code,代码的意思,X就是eXternal,外部的意思MOVC就是读代码存储器,MOVX就是读写外部存储器,即外部RAM ...
转载 2013-01-11 15:09:00
113阅读
2评论
MSP430汇编:1、MOV,MOVX,MOVC区别和用法MOV就是移动的意思,C就是Code,代码的意思,X就是eXternal,外部的意思MOVC就是读代码存储器,MOVX就是读写外部存储器,即外部RAM  MOV: 单片机内部的寄存器或者存储器之间相互传递数据(内部RAM);    MOVX: 单片机内部的A累加器与片外的数据存储器...
原创 2021-09-29 11:41:21
417阅读
一、and和or指令and指令:逻辑与指令,按位进行与运算。通过该指令可以将操作对象的相应位设为0,其他位不变。or指令:逻辑或指令,按位进行或运算。通过该指令可以将操作对象的相应位设为1,其他位不变。二、关于ASCII码三、以字符形式给出的数据 在汇编程序中,用'......'的形式指明数据是以字符的形式给出的,编译器将把它们转化为相对应的ASCII码。四、大小写和数字字符与数字间的转
转载 2023-06-07 17:25:47
133阅读
汇编In,Out IN AL,21H  从21H端口读取一字节数据到ALIN AX,21H  从端口地址21H读取1字节数据到AL,从端口地址22H读取1字节到AHMOV DX,379HIN AL,DX   从端口379H读取1字节到ALOUT 21H,AL  将AL的值写入21H端口OUT 21H,AX  将AX的值写入端口地址21H开始的连续两个字节
转载 2023-06-06 16:59:50
70阅读
## Java负角度转正角度的实现流程 为了教会刚入行的小白如何实现Java负角度转正角度,我们将按照以下步骤进行: 1. 了解角度的表示方式 2. 理解负角度与正角度的关系 3. 编写Java代码实现负角度转正角度 ### 1. 角度的表示方式 在数学中,角度通常用度(degree)或弧度(radian)来表示。其中, - 度:用一个小圆圈 ° 表示,一个圆的周长被分为360等分,每一
原创 10月前
103阅读
1. bic BIC指令的格式为: BIC{条件}{S}  目的寄存器,操作数1,操作数2BIC指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。操作数1应是一个寄存器, 操作数2可以是一个寄存器、被移位的寄存器、或一个立即数。操作数2为32位的掩码,如果在 掩码中置了某一位1,则清除这一位。未设置的掩码位保持不变。bic r0,r0,#0x1f0x1f=11111b其含义:清除
转载 2023-06-08 11:00:28
300阅读
  • 1
  • 2
  • 3
  • 4
  • 5