C理解(一):内存与位操作
本文主要探讨C语言的内存和为操作操作相关知识。
冯诺依曼结构和哈佛结构
冯诺依曼结构:数据和代码放在一起,便于读取和修改,安全性低
哈佛结构是:数据和代码分开存放,安全性高,读取和修麻烦
内存
内存是用来存储全局变量、局部变量等变量
操作系统把内存分成4kb页面以为单位来管理
页面内以字节为单位通过管理接口(API)管理内存
内存属性
内存属性:地址和空间
空间:内存单元大小
地址:内存条上的实际位置(物理地址)和逻辑地址(地址编号)一一对应
内存单元类似方格,方格的位置为物理地址,方格的编号为逻辑地址,方格的空间为内存单元空间大小
内存和数据类型
int类型与CPU数据位宽相同,32位的CPU的位宽是32位,int类型为32位,占4字节
数据类型表示内存单元长度和解析方式
int读取过程中,从起始处读取4个字节单元,再int的方式解析读取的内容
内存对齐
内存对其访问效率高
int类型变量对齐与非对齐
对齐: 0 1 2 3
非对齐: 1 2 3 4
变量访问内存
int a;编译器申请int类型内存内存单元,把a和内存单元绑定
a = 5;内存单元空间中写入5
a += 4; 编译器先读a值再加4,最后重写写入到内存单元。
指针间接访问内存
int a;int *p;
a和p代表内存地址,内存地址长度和解析方法不同
a为int型,长度是4字节,解析方式是int
p是int *类型,长度是4字节,解析方法是int *
数组访问内存
int b[10];
编译器分配40个字节长度给b,首元素地址和b绑定
每个元素类型都是int,长度是4字节
第一个字节地址为首地址,首元素a[0]地址为首地址
栈(stack)
自动分配和回收内存
内存空间可反复使用
内存使用完不会清理,使用前需初始化
操作系统固定了栈大小,变量定义防止栈溢出
栈变量指针空间是临时的,同一变量每次初始化使用的是不同的内存地址空间
堆(heap)
堆管理内存分配灵活,按需分配
内存按需申请使用,使用完释放
内存空间可反复使用
内存使用完不会清理,使用前需初始化
内存申请
void *malloc(size_t size);
void *calloc(size_t nmemb, size_t size); // nmemb个单元,每个单元size字节
void *realloc(void *ptr, size_t size); // 改变原来申请的空间的大小的
malloc用来申请内存,返回void *类型指针,malloc返回申请内存空间首地址,失败返回NULL
malloc只分配内存空间,空间存储的数据类型不做定义
段
代码段:程序中可执行部分
数据段(数据区、静态数据区、静态区):初始化为非零的全局变量,静态局部变量
bss段(ZI段):初始化为0或未初始化的全局变量
特殊数据
char *p = "linux";字符串分配在代码段,是常量不是变量
单片机编译过程中将const修饰变量放在代码段实现不能修改
gcc编译器将const修饰的变量放在数据段,只是默认不可修改,实际可通过地址访问修改
位(32位操作系统)
位(1bit)
字节(8bit)
半字(16bit)
字(32bit)
位操作
位操作:与& 或| 取反~ 异或^ 左移<< 右移>>
位清0 : & 0
位置1 : | 1
位取反 : ^ 1
特定位设置
#define SET_NTH_BIT(x, n) (x | ((1U)<<(n-1)))
特定位清除
#define CLEAR_NTH_BIT(x, n) (x & ~((1U)<<(n-1)))
截取特定位
#define GETBITS(x, n, m) ((x & ~(~(0U)<<(m-n+1))<<(n-1)) >> (n-1))
demo:
位清除,设置,截取练习
#include <stdio.h>int main()
{int a = 0x8a66;//设置bit3a |= (1<<3);printf("bit3 set :%x\n",a);//设置bit3 ~ bit8a |= (0x1f << 3);printf("bit3-8 set :%x\n",a);//清除bit5a &= ~(1 << 5);printf("bit5 clear :%x\n",a);//清除bit6 ~ bit12a &= ~(0x3f << 6);printf("bit6-12 clear :%x\n",a);//设置bit9 ~ bit14为9a &= ~(0x1f << 9);a |= (12 << 9);printf("set 12 in bit9-14 :%x\n",a);//bit6 ~ bit12 加9,bit4 ~ bit7 加7int tmp = ((a & (0x3f << 6)) >> 6) + 9;a = (a & ~(0x3f << 6)) | (tmp << 6);tmp = ((a & (0xf << 1)) >> 1 ) + 7;a = (a & ~(0xf << 1)) | (tmp << 1);printf("bit6-12 + 9 and bit1-4 +7 :%x\n",a);return 0;
}
结果示例:
相关文章:
C理解(一):内存与位操作
本文主要探讨C语言的内存和为操作操作相关知识。 冯诺依曼结构和哈佛结构 冯诺依曼结构:数据和代码放在一起,便于读取和修改,安全性低 哈佛结构是:数据和代码分开存放,安全性高,读取和修麻烦 内存 内存是用来存储全局变量、局…...
ESP8266使用记录(四)
放上最终效果 ESP8266&Unity游戏 整合放进了坏玩具车遥控器里 最终只使用了mpu6050的yaw数据,因为roll值漂移…… 使用了https://github.com/ElectronicCats/mpu6050 整个流程 ESP8266取MPU6050数据,处理后通过udp发送给Unity显示出来 MPU6050_Z…...
云原生Kubernetes:K8S安全机制
目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜…...
【数据结构】归并排序、基数排序算法的学习知识点总结
目录 1、归并排序 1.1 算法思想 1.2 代码实现 1.3 例题分析 2、基数排序 2.1 算法思想 2.2 代码实现 2.3 例题分析 1、归并排序 1.1 算法思想 归并排序是一种采用分治思想的经典排序算法,通过将待排序数组分成若干个子序列,将每个子序列排序ÿ…...
【C++】C++模板进阶 —— 非类型模板参数、模板的特化以及模板的分离编译
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C学习 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【C】C多…...
HTML的相关知识
1.什么是HTML?基本语法 HTML: Hyper Text Markup Language (超文本标记语言) 超文本?超级文本,例如流媒体,声音、视频、图片等。 标记语言?这种语言是由大量的标签组成。HTML标签参考手…...
基于微信小程的流浪动物领养小程序设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…...
Java后端接口编写流程
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Java后端接口编写流程 Java后端接口编写流程,更具业务逻辑编写Java后端接口,提供给前端访问 实现逻辑流程 POJO:实体类编写 Data B…...
【问题记录】解决“命令行终端”和“Git Bash”操作本地Git仓库时出现 中文乱码 的问题!
环境 Windows 11 家庭中文版git version 2.41.0.windows.1 问题情况 在使用 “命令行终端” 和 “Git Bash” 在本地Git仓库敲击命令时,对中文名称文件显示一连串的数字,如下所示:这种情况通常是由于字符编码设置不正确所引起的 解决办法 设置…...
软考高级之系统架构师之软件需求工程
概述 一个完整的软件生存周期是以需求为出发点。软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望。 需求开发: 需求获取需求分析需求定义(需求规格说明书)需求验证 需求管理: 变更控制版本控制需求跟踪需求状态跟踪 需…...
使用 Velocity 模板引擎的 Spring Boot 应用
使用 Velocity 模板引擎的 Spring Boot 应用 模板引擎是构建动态内容的重要工具,特别适用于生成HTML、邮件内容、报告和其他文本文档。Velocity是一个强大的模板引擎,它具有简单易用的语法和灵活性。本文将介绍如何在Spring Boot应用中使用Velocity模板…...
mysql的mvcc详解
一 MVCC的作用 1.1 mvcc的作用 1.MVCC(Multiversion Concurrency Control)多版本并发控制。即通过数据行的多个版本管理来实现数据库的并发控制,使得在InnoDB事务隔离级别下执行一致性读操作有了保障。 2.mysql中的InnoDB中实现了MVCC主要…...
FreeRTOS两个死机原因(中断调用接口异常)【杂记】
1、中断回调函数中没有使用中断级API (xxFromISR) 函数 xSemaphoreGiveFromISR(uart_busy,&HighterTask);----正确 xSemaphoreGive(uart_busy);-----错误2、比configMAX_SYSCALL_INTERRUPT_PRIORITY优先级高的中断函数中使用了FreeRTOS的函数 3、临界代码保护后不可调用os…...
【AI视野·今日Robot 机器人论文速览 第四十三期】Thu, 28 Sep 2023
AI视野今日CS.Robotics 机器人学论文速览 Thu, 28 Sep 2023 Totally 37 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚****触觉力控学习策略,基于触觉的主动推理与力控用于小孔插入任务。提出了姿态控制与插入控制双策略模型。 (from 东京大学…...
批量快捷创建新数组的几种方式
1. for循环, push(比较简单, 就不上代码了) 2.创建空数组,填充null,然后map: function createData() { return new Array(1000) .fill(null) .map((v,i)>({name: name${i1}})) } console.log(createData()) 3.Array.frommap function createData() { return Array.from…...
单目标应用:基于沙丁鱼优化算法(Sardine optimization algorithm,SOA)的微电网优化调度MATLAB
一、沙丁鱼优化算法 沙丁鱼优化算法(Sardine optimization algorithm,SOA)由Zhang HongGuang等人于2023年提出,该算法模拟沙丁鱼的生存策略,具有搜索能力强,求解精度高等特点。 沙丁鱼主要以浮游生物为食,这些生物包括细菌、腔肠…...
基于Halo搭建个人博客
准备 云服务器 安装Docker 开启8090端口 步骤 拉取Halo镜像 docker pull halohub/halo:2.1.0 制作容器并启动 docker run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 halohub/halo:2.1.0 --halo.external-urlhttp://服务器ip:8090/ --halo.security.in…...
DPDK系列之三十一DPDK的并行机制简介
一、并行机制 什么是并行机制?这个很多开发者的眼中,其实是模糊的。可能说起来头头是道,但是细一查究竟,发现都是飘在空中的东西。在前面的“多核和多CPU编程”中,对并行机制已经进行了较深入的分析,这里只…...
【Java】复制数组的四种方式
1. System.arraycopy() 用来将一个数组的(一部分)内容复制到另一个数组里面去。 定义: void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);例: int[] arr1 { 1, 2, 3, 4, 5 }; int[] arr2 new…...
设计模式5、原型模式 Prototype
解释说明:使用原型实例指定待创建对象的类型,并且通过复制这个原型阿里创建型的对象 UML 结构图: 抽象原型(Prototype):规定了具体原型对象必须实现的clone()方法 具体原型(ConcretePrototype&…...
驱动挂载物理页代码示例
驱动挂载物理页代码示例 使用的实验环境为32位xp系统在101012分页模式下 此实验用于测试对分页模式的掌握程度 代码思路如下: 获取目标进程的cr3在目标进程中申请新的物理页拆分新申请的物理页的线性地址通过差分出的内容获取pte将pte写入到要挂载的线性地址的p…...
【新版】系统架构设计师 - 层次式架构设计理论与实践
个人总结,仅供参考,欢迎加好友一起讨论 文章目录 架构 - 层次式架构设计理论与实践考点摘要层次式体系结构概述表现层框架设计MVC模式MVP模式MVVM模式使用XML设计表现层表现层中UIP设计思想 中间层架构设计业务逻辑层工作流设计业务逻辑层设计 数据访问层…...
大数据Flink(九十):Lookup Join(维表 Join)
文章目录 Lookup Join(维表 Join) Lookup Join(维表 Join) Lookup Join 定义(支持 Batch\Streaming):Lookup Join 其实就是维表 Join,比如拿离线数仓来说,常常会有用户画像,设备画像等数据,而对应到实时数仓场景中,这种实时获取外部缓存的 Join 就叫做维表 Join。…...
Docker方式创建MySQL8的MGR集群
目录 一、MGR简述二、安装环境及要求2.1 系统版本2.2 网络要求 三、安装步骤3.1 创建容器3.2 创建用户3.3 安装插件3. 4 启动集群3.5 加入集群 四、查看集群查看 MGR 组成员列表查看 MGR 组成员拓扑信息 五、其他说明集群配置要求集群配置限制集群相关变量和状态 一、MGR简述 …...
问 ChatGPT 关于GPT的事情:扩展篇
一、GPT预训练有什么节省显存和算力的技巧吗?我如何拿四块A100完成175B模型的预训练? 对于GPT预训练,有一些技巧可以帮助节省显存和算力。以下是一些常用的技巧: 按批次截断:在较长的文本序列中,将其切割…...
Spring Boot 集成 MinIO 实现文件上传、下载和删除
MinIO 是一种开源的对象存储服务,它基于云原生架构构建,并提供了高性能、易于扩展和安全的存储解决方案。 一.安装和配置 MinIO 服务器 为了演示方便,本文采用Windows安装 1.在官方网站下载MinIO 安装文件,地址:ht…...
Polygon Miden交易模型:Actor模式 + ZKP => 并行 + 隐私
1. 引言 前序博客: Polygon Miden:扩展以太坊功能集的ZK-optimized rollupPolygon Miden zkRollup中的UTXO账户混合状态模型 Polygon Miden为: ZK-optimized rollup由客户端生成证明完善Polygon ZK系列解决方案,致力于成为网络…...
Java流的体系结构(二)
文章目录 一、对象流的使用1.概念2.序列化机制3.代码案例:序列化过程:将内存中的java对象保存到磁盘中或通过通络传输出去4.反序列化,将磁盘文件中的对象还原为内存中的一个java对象 二、RandomAccessFile的使用1.说明2.代码案例 提示&#x…...
python计算阶层
阶层(Factorial)是指从1到一个正整数n的所有整数相乘,即n! 1 2 3 … n。下面是Python代码计算阶层: def factorial(n):"""计算阶层:param n: 正整数:return: n的阶层"""if n 1 or n 0:retu…...
前端架构师之01_ES6_基础
1 初识ES6 简单来说,ECMAScript是JavaScript语言的国际标准,JavaScript是实现ECMAScript标准的脚本语言。 2011年,ECMA国际标准化组织在发布ECMAScript 5.1版本之后,就开始着手制定第6版规范。 存在的问题:这个版本…...
郑州品牌网站建设官网/免费技能培训在哪里报名
目录 Kafka的基本介绍Kafka的设计原理分析Kafka数据传输的事务特点Kafka消息存储格式副本(replication)策略Kafka消息分组,消息消费原理Kafak顺序写入与数据读取消费者(读取数据) Kafka的基本介绍 Kafka是最初由Lin…...
品牌创意网站建设/互联网媒体广告公司
知识点:CSS3 transform 属性、transition属性 实现效果: 效果说明:一排图片大小一致,当鼠标放在任一图片上时,图片放大并且旋转。 制作思路: 1、给图片添加<a>标签,利用伪类选择器实现 2、设置鼠标悬浮在a标签上时,添加动画属性。 3、主要用到属性:transf…...
物流网站模板免费/深圳网站公司排名
浅谈工作流调度系统 http://ju.outofmemory.cn/entry/221885 每个公司都有自己的一套或者多套调度系统,从简单到复杂,满足各种定制化的需求。 Crontab任务调度 在没有工作流调度系统之前,公司里面的任务都是通过crontab来定义的,…...
常用的b2b网站有哪些/电商培训机构靠谱吗
目前项目中之有一个cloud-provider-payment8001提供者 看图 服务提供者也是多个,也需要变成集群,最终的结果就是注册中心集群,提供者是集群。 新建cloud-provider-payment8002参考 就是把cloud-provider-payment8001拷贝到8002,…...
wordpress快速下载地址/软文撰写案例
1. 字符串大小写转换 string没有直接提供to_upper或to_lower这样的方法,不过有更通用的方法: std::string s("hello"); transform(s.begin(), s.end(), s.begin(), toupper); transform(s.begin(), s.end(), s.begin(), tolower);std::vecto…...
网站数据维护/seo怎么做优化
本来准备上微软的SCOM 演示下system center2016的,顺便下一个windows 2016 RS15G的文件,2个小时过去了,还有2小时看样子绝对要过夜啊。然后搜了下其他开源的,发现了这货。Overview然后找了老牌监控软件MRTG, 全程Multi Router Tra…...