linux内核中的 指针 和 unsigned long
文章目录
- 1.指针的来源
- 2.指针的定义:
- 3.字长和数据类型
- 4.Linux内核为什么常用unsigned long来替代指针?
- 参考资料
1.指针的来源
方便引用一个内存地址。
给定一个内存地址,CPU就可以取出该地址的数据。
给定一个内存地址,CPU就可以写入该地址一个值。
2.指针的定义:
指针的本质其实也是一个数据类型,和char, short, int 等一样都属于c语言中的基本类型,所以大小也确定了(与它是什么类型无关),32位系统为4个字节,64为系统为8个字节。
无论指针什么类型(大小以确定),它存放的都是一个地址,只不过这个地址存放不同数据类型而已。
指针变量与其它变量(如int)相似,也有两个方面即:值 和 类型(所指向的数据类型)
值:表示某个对象的地址(位置)。
类型:表示那个地址(位置)上所存储对象的类型。
备注:指针的强制类型转换不会改变真实的指针,只是告诉编译器以新的数据类型来看待被指向的数据。
3.字长和数据类型
在支持Linux的体系结构中,能够由机器一次完成处理的数据称之为字,指明了指针数据的 nominal size。虚拟地址是以这样的一个字来编码,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。即:对于一个字长位n的机器,虚拟地址的范围位 0 ~ 2n-1 ,程序最多访问2n个字节。
处理器通用寄存器的大小和他的字长是相同的。long类型总是等于机器的字长,也等于指针的大小。
但是long和int 大小没办法保证一样。比如:
Linux支持的64位体系架构 long 8个字节,int 4个字节。
Linux支持的32位体系架构 long 4个字节,int 4个字节
因此不要假设 long 和 int 长度相等,也不要假设指针和int 长度相等。
备注:上面只是讨论支持Linux的体系架构
4.Linux内核为什么常用unsigned long来替代指针?
因为指针也是一种基本类型,所以大小是确定的,32位系统下为4个字节,由于地址的值不能为负,所以指针的值的范围为 0 - (2^32-1),与unsigned long大小,值的范围一样。
所以32位系统下指针的最大寻址范围为2^32-1,即4G(所以32位系统虚拟地址为0 - 4G)。
64位系统下大小为8个字节,与unsigned long大小,值的范围一样。
可见指针与unsigned long 大小,值的范围也一样。(但意义不一样,只是值一样)
小结:指针与unsigned long 大小一样,值的范围也一样。
(当linux内核只关心这个地址的值,用于去运算、查找、对比,而不是关心通过这个地址去访问内存,这个时候,内核经常用unsigned long来替代指针)。
参考资料
为什么Linux内核常常用unsigned long来代替指针
聊聊C语言和指针的本质
相关文章:
linux内核中的 指针 和 unsigned long
文章目录 1.指针的来源2.指针的定义:3.字长和数据类型4.Linux内核为什么常用unsigned long来替代指针?参考资料 1.指针的来源 方便引用一个内存地址。 给定一个内存地址,CPU就可以取出该地址的数据。 给定一个内存地址,CPU就可以…...
STM32--GPIO
文章目录 GPIO简介GPIO的基本结构GPIO位结构GPIO模式LED和蜂鸣器LED闪烁工程及程序原码代码: 蜂鸣器工程和程序原码代码 传感器光敏传感器控制蜂鸣器工程代码 GPIO简介 GPIO(General Purpose Input Output)是通用输入/输出口的简称。它是一种…...
剑指 Offer ! 61. 扑克牌中的顺子
参考资料:力扣K神的讲解 剑指 Offer 61. 扑克牌中的顺子 简单 351 相关企业 从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12&…...
《玩转Python数据分析专栏》大纲
欢迎来到《玩转Python数据分析分类专栏》!在这个专栏中,我们将带您深入探索数据分析的世界,以Python为工具,解析各个领域的实际应用场景。通过100篇教程,我们将逐步引领您从入门级到高级,从基础知识到实战技巧,助您成为一名优秀的数据分析师。 专栏目标 本专栏旨在帮助…...
Zabbix自动注册服务器及部署代理服务器
文章目录 一.zabbix自动注册1.什么是自动注册2.环境准备3.zabbix客户端配置4.在 Web 页面配置自动注册5.验证自动注册 二.部署 zabbix 代理服务器1.分布式监控的作用:2.环境部署3.代理服务器配置4.客户端配置5.web页面配置5.1 删除原来配置5.2 添加代理5.3 创建主机…...
SpringBoot下使用自定义监听事件
事件机制是Spring的一个功能,目前我们使用了SpringBoot框架,所以记录下事件机制在SpringBoot框架下的使用,同时实现异步处理。事件机制其实就是使用了观察者模式(发布-订阅模式)。 Spring的事件机制经过如下流程: 1、自定义事件…...
并发编程面试题1
并发编程面试题1 一、原子性高频问题: 1.1 Java中如何实现线程安全? 多线程操作共享数据出现的问题。 锁: 悲观锁:synchronized,lock乐观锁:CAS 可以根据业务情况,选择ThreadLocal,让每个…...
【对于一维信号的匹配】对一个一维(时间)信号y使用自定义基B执行匹配追踪(MP)研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
【Oracle 数据库 SQL 语句 】积累1
Oracle 数据库 SQL 语句 1、分组之后再合计2、显示不为空的值 1、分组之后再合计 关键字: grouping sets ((分组字段1,分组字段2),()) select sylbdm ,count(sylbmc) a…...
Django中级指南:理解并实现Django的模型和数据库迁移
Django 是一个极其强大的 Python Web 框架,它提供了许多工具和特性,能够帮助我们更快速、更便捷地构建 Web 应用。在本文中,我们将会关注 Django 中的模型(Models)和数据库迁移(Database Migrations&#x…...
Chatgpt API调用报错:openai.error.RateLimitError
Chatgpt API 调用报错: openai.error.RateLimitError: You exceeded your current quota, please check your plan and billing details. 调用OpenAI API接口 import openai import osopenai.api_key os.getenv("OPENAI_API_KEY")result openai.Chat…...
一键获取数百张免费商用人脸!AI人脸生成器来袭
随着科技的发展,人工智能正在渗透到生活的各个角落,设计行业也不例外。在网页、APP、PPT 等界面设计中,设计师经常需要插入真实的人脸素材,以增强作品的真实感和场景化。但是获取素材既不容易,质量和价格也难免成为设计…...
跳跃游戏 II——力扣45
文章目录 题目描述解法一 贪心题目描述 解法一 贪心 int jump(vector<int>& nums){in...
Stable Diffusion - 常用的负向提示 Embeddings 解析与 坐姿 (Sitting) 提示词
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132145248 负向 Embeddings 是用于提高 StableDiffusion 生成图像质量的技术,可以避免生成一些不符合预期的图像特征,比如…...
工厂方法模式(一):C#实现指南
工厂方法模式是一种创建型设计模式,用于处理对象的创建问题。通过使用工厂方法模式,我们可以将对象的创建过程与使用过程分离,从而增加代码的灵活性和可维护性。 工厂方法模式的定义 工厂方法模式定义了一个创建对象的接口,但由子…...
Spring接口InitializingBean的作用和使用介绍
在Spring框架中,InitializingBean接口是一个回调接口,用于在Spring容器实例化Bean并设置Bean的属性之后,执行一些自定义的初始化逻辑。实现InitializingBean接口的Bean可以在初始化阶段进行一些必要的操作,比如数据的初始化、资源…...
Excel---成绩相同者,名次并列排列,三步搞定
需求:一张成绩表,共341行(340条数据,第一条为标题),根据成绩进行排序,成绩相同进行名次并列 一、选择生成结果的位置,我这里点击了一下E2单元格 二、公式—>插入–>rank函数 数值:D2 表示…...
Elasticsearch6.x和7.x的区别
Elasticsearch6.x和7.x的区别 1、查找方面的区别 在增删改方面,6.x和7.x是一样的,在查找方面(分为普通查找和有高亮的查找),6.x和7.x有区别。 在7.x的es中: org.springframework.data.elasticsearch.cor…...
基于STM32设计的口罩识别和无线测温系统
一、设计需求 基于STM32设计的口罩识别和无线测温系统 1.1 项目背景 随着深度学习和计算机视觉的快读发展,与此有关的技术设备已经被大幅度的使用,并且不仅仅在这两个方面,更在许许多多的领域都有使用。众所周知,图像理解之中的最重要的一个步骤即为目标检测,和为目标检测…...
第五十天
●软件测试的目的 软件测试的目的是寻找错误,并且尽可能找出更多的错误。 测试是程序的执行过程,目的在于发现错误 一个好的测试用例在于能够发现至今为止未发现的错误 一个成功的测试是发现了至今未发现的错误的测试 ●软件测试工作流程࿱…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
【Go语言基础【6】】字符串格式化说明
文章目录 零、格式化常用场景一、Go 字符串格式化核心概念二、常用格式化占位符1. 整数类型2. 浮点数类型3. 字符串与布尔类型4. 指针与通用类型 三、宽度与精度控制1. 宽度控制2. 精度控制(浮点数/字符串) 零、格式化常用场景 数值转字符串:…...
【Unity】R3 CSharp 响应式编程 - 使用篇(二)
一、通用的事件监听用法 using System;using R3;using UnityEngine;namespace Aladdin.Standard.Observable.Common{public class CommonObservable : MonoBehaviour{// 默认会调用1次public SerializableReactiveProperty<int> serializableReactiveProperty;…...
跨域请求解决方案全解析
跨域请求可以通过多种技术方案实现,核心是绕过浏览器的同源策略限制。以下是主流解决方案及具体实现方式: 一、CORS(跨域资源共享) 最常用的标准化方案,通过服务器设置HTTP响应头实现: Access-Control-Al…...
【Mac 从 0 到 1 保姆级配置教程 16】- Docker 快速安装配置、常用命令以及实际项目演示
文章目录 前言1. Docker 是什么?2. 为什么要使用 Docker? 安装 Docker1. 安装 Docker Desktop2. 安装 OrbStack3. Docker Desktop VS OrbStack5. 验证安装 使用 Docker 运行项目1. 克隆项目到本地2. 进入项目目录3. 启动容器: 查看运行效果1. OrbStack 中…...
