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&…...
ComfyUI-TeaCache:基于时间步感知缓存的扩散模型推理加速技术实现1.5-3倍性能提升
ComfyUI-TeaCache:基于时间步感知缓存的扩散模型推理加速技术实现1.5-3倍性能提升 【免费下载链接】ComfyUI-TeaCache 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-TeaCache 在AI图像与视频生成领域,扩散模型的推理速度一直是制约创作…...
避坑指南:RK3588 SD卡刷机时FAT32转EXT4的完整流程(含工具包)
RK3588大容量镜像烧写实战:突破FAT32限制的EXT4全流程解决方案 当你在RK3588开发板上尝试烧写超过4GB的Ubuntu或Debian镜像时,是否遇到过SD卡工具报错?这不是你的操作问题,而是FAT32文件系统的天然限制。本文将带你深入理解这一技…...
cv_unet_image-colorization高保真上色案例:人脸肤色/服饰纹理自然还原实录
cv_unet_image-colorization高保真上色案例:人脸肤色/服饰纹理自然还原实录 你有没有翻看过家里的老相册?那些泛黄的黑白照片,记录着珍贵的瞬间,却总让人觉得少了点什么。色彩,是记忆的温度。过去,为黑白照…...
从手机照片同步到数据去重:用C++ STL set/map搞定‘两个数组交集’背后的真实业务逻辑
从手机照片同步到数据去重:用C STL set/map搞定‘两个数组交集’背后的真实业务逻辑 每次换新手机时,最头疼的莫过于照片和联系人的迁移——那些重复的截图、相似的风景照、多年前的证件照,究竟该如何高效筛选?这背后隐藏的正是计…...
LeetCode 70. Climbing Stairs 题解
LeetCode 70. Climbing Stairs 题解 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼…...
毕业季求生指南:用百考通AI重塑你的论文写作全流程
深夜的电脑屏幕前,面对空白的文档和堆积如山的文献,你是否感到无从下手?当查重率居高不下、导师的修改意见密密麻麻时,是否渴望一种更智能的解决方案?本文将为你揭示一个学术写作的新可能。 01 开题之困:从…...
Python自动化爬取企查查企业工商信息的实战技巧
1. Python爬取企查查数据的核心思路 企查查作为国内权威的企业信息查询平台,包含了大量有价值的工商注册信息。对于金融、证券行业的从业者来说,经常需要批量获取这些数据进行分析。手动一个个查询不仅效率低下,还容易出错。这时候Python自动…...
FlowState Lab新手避坑指南:快速上手时间序列预测的5个技巧
FlowState Lab新手避坑指南:快速上手时间序列预测的5个技巧 1. 环境准备与快速部署 1.1 系统要求与安装步骤 FlowState Lab作为基于IBM Granite架构的时间序列分析工具,对运行环境有以下要求: 操作系统:Linux (推荐Ubuntu 20.…...
Nunchaku-flux-1-dev在AI编程教学中的应用:代码纠错与优化
Nunchaku-flux-1-dev在AI编程教学中的应用:代码纠错与优化 1. 引言 编程学习过程中,很多初学者都会遇到这样的困境:写出的代码运行报错,却不知道错在哪里;代码虽然能运行,但效率低下、结构混乱࿰…...
Phi-3 Forest Laboratory日志分析与监控方案:使用Prometheus与Grafana
Phi-3 Forest Laboratory日志分析与监控方案:使用Prometheus与Grafana 你是不是也遇到过这种情况?部署好的Phi-3 Forest Laboratory模型服务,用着用着突然变慢了,或者干脆没响应了。用户抱怨,自己却一头雾水ÿ…...
