voliate类型的原理及用法

article/2025/9/19 21:19:31

voliate类型,机器才读取执行代码读取内存后,将读取的内容存到高速缓冲区里,在硬件里是寄存器,这样在一下次读取的时候就可以直接从高速缓存区里面读取(cache),这也是读取速度加快的原因,但是如果在内存中改变这个变量,而且刚刚读取过这个内容,就不会再访问地址去读取。

例如:
int a=i;//从i的所在地址读取值,并放入高速缓冲区或者寄存器

int b=i;//两次读取之间没有改变i的操作,根据编译器的优化原则,直接从缓冲区里面取值再赋值,而不会再去内存里寻址。

这样在一般的程序里不会出现错误,但是在硬件里的中断函数,引起的值得变化,但编译器觉得两句话之间没有更改操作,而会直接继续从缓冲区里读取,造成错误。

voliate的用处就是声明完这个变量或指针后之后,无论什么时候想取这个变量或者这个指针所指地方的值,都必须按照寻地址的方式去内存里面读取这个值。这样就不存在编译器优化检测不准确地情况,在中断函数已经多线程中尤为常见。

参考https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html

关于指针直接操作地址问题:

#include<stdio.h>
int main()
{
int *p=0x0123;
*p=5;
printf("%d\n", *p);
}

首先这样写是错误的,因为*p只能被赋值一个地址类型的数,而0x0123在编译器来说这是一个数,而不是一个地址,所以进行更改

#include<stdio.h>
int main()
{
int *p=(int *)0x0123;
*p=5;
printf("%d\n", *p);
}

运行结果:
在这里插入图片描述

这样的代码是不能直接在电脑运行的,因为带有操作系统的机器都有保护机制,在系统里面不能直接对内存进行操作,会造成不必要的操作,但是在51或arm里面可以,不在操作系统里的程序可以直接对程序进行操作。

关于不同类型的指针的区别:
不同的指针类型,可操作长度的不同之间的区别。


http://chatgpt.dhexx.cn/article/rk9gX4iD.shtml

相关文章

voliate(轻量级的同步机制)

voliate特点: JMM内存模型三大特性&#xff1a;可见性&#xff0c;原子性&#xff0c;有序性。 1.禁止指令重排序&#xff1a; voliate实现禁止指令重排&#xff0c;避免多线程环境下程序出现乱序执行的现象。 多线程环境中线程交替执行&#xff0c;由于编译器优化重排的…

voliate工作实际应用场景

哈喽大家好&#xff0c;我是IT老哥&#xff0c;今天我们来讲讲面试必问的voliate 单线程的情况下呢&#xff0c;我们肯定用不到这个voliate 只有在多线程的情景下才能用到&#xff0c;文章结尾我会举一个经典的案例 voliate三特性 保证可见性&#xff1b;不保证复合操作的原子性…

voliate原理

voliate原理 voliate 当使用voliate关键字修饰共享变量(实例变量、静态变量)时&#xff0c;它将具备两个特性&#xff1a;可见性和禁止指令重排序优化 1.可见性 变量被修改后&#xff0c;会立即保存在主存中&#xff0c;并清除工作内存中的值。新值对于线程来说都是可见的…

C语言关键字之voliate

C语言关键字之voliate voliate的作用是作为指令关键字&#xff0c;确保本条指令不会因为编译器的优化而省略&#xff0c;而且要求每次从内存中直接读取值 当使用voliate 声明变量值时&#xff0c;系统总是重新从它所在的内存读取数据&#xff0c;直接访问变量地址&#xff0c…

java中voliate的讲解

Java并发编程&#xff1a;volatile关键字解析 volatile这个关键字可能很多朋友都听说过&#xff0c;或许也都用过。在Java 5之前&#xff0c;它是一个备受争议的关键字&#xff0c;因为在程序中使用它往往会导致出人意料的结果。在Java 5之后&#xff0c;volatile关键字才得以重…

多线程 - voliate 关键字

介绍 volatile 是 Java 中的关键字&#xff0c;用于修饰变量。它的作用是强制对被修饰的变量的写操作立即刷新到主存中&#xff0c;并强制对该变量的读操作从主存中读取最新的值&#xff0c;而不是使用缓存中的值。 作用 保证变量的可见性&#xff1a; 可见性指的是多个线程…

volatitle

被volatitle修饰的变量能够保证可见性&#xff0c;不保证原子性&#xff0c;每个线程能够获取该变量的最新值。 实现的机制&#xff1a;在写volatitle变量写到主内存时&#xff0c;指令前会加上lock&#xff0c;该指令有两个影响&#xff1a; 将当前处理器缓存行的数据写回系统…

volatile

一、不得不提的volatile volatile是个很老的关键字&#xff0c;几乎伴随着JDK的诞生而诞生&#xff0c;我们都知道这个关键字&#xff0c;但又不太清楚什么时候会使用它&#xff1b;我们在JDK及开源框架中随处可见这个关键字&#xff0c;但并发专家又往往建议我们远离它。比如…

voliate关键字原理

被volatile修饰的变量在编译成字节码文件时会多个lock指令&#xff0c;该指令在执行过程中会生成相应的内存屏障&#xff0c;以此来解决可见性跟重排序的问题。 预备知识 指令重排序 为什么到指令重排序&#xff1a;一般来说&#xff0c;处理器为了提高程序运行效率&#xff…

voliate关键字

voliate关键字详解&#xff1a; 1.内存模型相关概念 物理计算机内存访问图&#xff1a; 任何计算都是在CPU内处理的&#xff0c;那么也就必须涉及到数据读写&#xff0c;但是CPU每次都要和主内存交互读写数据效率太低了&#xff0c;于是有了高速缓存。在程序运行时&#xff…

java面试题:voliate底层原理——详解

1. voliate底层原理 1.1 voliate变量的特点 可见性&#xff1a; 当一个线程修改了声明为volatile变量的值&#xff0c;新值对于其他要读该变量的线程来说是立即可见的。有序性&#xff1a; volatile变量的所谓有序性也就是被声明为volatile的变量的临界区代码的执行是有顺序的…

FSM有限状态机(三段式)-Verilog实现

一. 状态机理论基础 状态机基本概念&#xff1a; 状态机由状态寄存器和组合逻辑电路构成&#xff0c;能够根据控制信号按照预先设定的状态进行状态转移&#xff0c;是协调相关信号动作、完成特定操作的控制中心。 以上是标准解释&#xff0c;其实状态机就是为了解决比如IIC协…

Verilog描述有限状态机(一段式、二段式、三段式)

有限状态机&#xff08;FSM&#xff09;的输出取决于过去状态以及当前输入&#xff0c;是时序逻辑电路。适合描述那些发生有先后顺序或者有逻辑规律的事情&#xff0c;状态机的本质就是对具有逻辑顺序或时序规律的事件进行描述的一种方法&#xff0c;广泛用于多种场合。 因此&…

以爱情规律为例,浅谈三段式描述状态机

目录 基础概念介绍 状态机的要素 FSM的分类 Verilog描述状态机的方法 一段式描述 两段式描述 三段式描述 结语 基础概念介绍 今夜闲来无事&#xff0c;忽然想到最近准备复习一下Verilog语法&#xff0c;所以就侃一侃状态机吧&#xff01; 状态机根据状态的数量可以分为两…

三段式状态机-FSM

三段式代码多&#xff0c;但是有时钟同步&#xff0c;延时少&#xff0c;组合逻辑跟时序逻辑分开并行出错少。 (1)同步状态转移 &#xff08;2&#xff09;当前状态判断接下来的状态 &#xff08;3&#xff09;动作输出 如果程序复杂可以不止三个always 。always 后常接cas…

一段式、两段式和三段式状态机

这里写自定义目录标题 一段式两段式三段式 这张图片是mealy型状态机的结构&#xff0c;Moore型类似&#xff0c;输出与输入无关。 一段式 module moduleName (input clk,input rst_n,input in,output reg [3:0] out );localparam s14d0, s24d1, s34d2, s44d3, s54d4; reg [3:…

FPGA开发基础之三段式状态机

状态机由状态寄存器和组合逻辑电路构成&#xff0c;能够根据控制信号按照预先设定的状态进行状态转移&#xff0c;程序的运行其本质也是状态机&#xff0c;根据输入完成输出&#xff0c;得到新的状态。 在平时硬件电路的设计中经常需要用到状态机&#xff0c;例如CPU的取指、译…

关于三段式状态机第三段是组合逻辑还是时序逻辑的问题?

由于本人一直以来&#xff0c;用的三段式状态机&#xff0c;第三段写法都是组合逻辑写法&#xff0c;但是近期有小伙伴面试小公司&#xff0c;写到状态机的第三段时候&#xff0c;按照我一直用到的组合逻辑来写第三段&#xff0c;提供输出&#xff0c;被提出了质疑&#xff0c;…

【状态机设计】Moore、Mealy状态机、三段式、二段式、一段式状态机书写规范

目录 状态机介绍 状态机类型 Moore 型状态机 Mealy 型状态机 状态机设计流程 自动售卖机 状态机设计&#xff1a;3 段式&#xff08;推荐&#xff09; 实例 实例 状态机修改&#xff1a;2 段式 实例 状态机修改&#xff1a;1 段式&#xff08;慎用&#xff09; 实…

状态机的描述方法案例分析(一段式、二段式、三段式)

上篇博文讲了&#xff1a;FPGA中有限状态机的状态编码采用格雷码还是独热码&#xff1f; 那篇博文讲了状态机的状态编码是用格雷码还是独热码的问题&#xff0c;以及两者之间的优劣。状态机的描述方式采用的是一段式描述方式&#xff0c;也就是将整个状态机全部写到一个always…