程序数据模型由OS还是硬件架构决定?

文章目录

  • 前言
  • 硬件架构的作用
  • OS的作用
  • 编译器的角色
  • OS的数据模型
  • 参考


前言

在文章 1>>32的结果是1还是0 中提到了数据模型 L P 64 LP64 LP64 ,并提出这个数据模型主要是由 U n i x Unix Unix 以及类 U n i x Unix Unix 的操作系统使用居多,例如 L i n u x Linux Linux

L P 64 LP64 LP64 外,在 64 b i t 64bit 64bit 下还有其余的数据模型,如下表所示:
在这里插入图片描述上表中 I L P 32 ILP32 ILP32 数据模型也用于许多具有 32 位处理器的平台。该模型减少了代码大小和包含指针的数据结构的大小,但代价是地址空间更小,适合嵌入式系统。

看过了上述所有数据模型,我们会引出疑问:对于C语言程序,用户书写代码并通过编译器编译为可执行文件执行,那么在这个过程中,由谁来决定数据模型的选择,是OS还是硬件架构,编译器又扮演什么角色?

巧的是,已经有人在 S t a c k O v e r f l o w StackOverflow StackOverflow 上问过这个问题了,原链接在文末。

硬件架构的作用

我们知道,现在应用最为广泛的 64 64 64 位指令集架构是 x 86 _ 64 x86\_64 x86_64,又名 a m d 64 amd64 amd64 x 64 x64 x64 。它是 a m d amd amd 公司在 I n t e l Intel Intel i 386 i386 i386 的基础上于 1999 1999 1999 年提出的指令集,主要优点在于能够在 64 b i t 64bit 64bit 机器上运行 32 b i t 32bit 32bit 指令。所以我们在当前 64 b i t 64bit 64bit 机器上也可以运行 32 b i t 32bit 32bit 可执行程序。

但在此我们以 R I S C V RISCV RISCV 指令集 R V 64 I RV64I RV64I 为例。其提供指令 L D LD LD L W LW LW L H LH LH L B LB LB用于加载数据。其中, L D LD LD加载 64 64 64 位数据到寄存器, L W LW LW用于加载 32 32 32 位数据并符号扩展到 64 64 64 位寄存器, L H LH LH用于加载 16 16 16 位数据并符号扩展到 64 64 64 位寄存器, L B LB LB用于加载 8 b i t 8bit 8bit 数据。
同样的,用于加载数据并零扩展的指令有: L W U LWU LWU L H U LHU LHU L B U LBU LBU
用于存储数据的指令有: S D SD SD S W SW SW S H SH SH S B SB SB

根据上述我们知道一个 R I S C V RISCV RISCV 硬件可能支持多种操作模式,从 8 − 64 b i t 8-64bit 864bit

但只有硬件不够,还需要有OS的支持。我们可以在 64 b i t 64bit 64bit 处理器上运行 32 b i t 32bit 32bit 的OS,同时还可以在 64 b i t 64bit 64bit 的OS上运行 32 b i t 32bit 32bit 的用户程序。

OS的作用

在运行 L i n u x Linux Linux 中的程序时,程序可以遵循 I L P 32 ILP32 ILP32 L P 64 LP64 LP64 模型。当我在 W i n d o w s Windows Windows 系统时,程序可以遵循 I L P 32 ILP32 ILP32 L L P 64 LLP64 LLP64 模型。因此,即使在同一组硬件上,可以有两个操作系统待选择,不同OS在编译时又有两个“平台”可供选择。

L i n u x Linux Linux 为例,用户在编译时的选择中的两个常见的 L i n u x Linux Linux 平台为 x86_64-pc-linux-gnui386-pc-linux-gnu,分别对应 64 64 64 32 32 32 位用户程序。

编译器的角色

编译器主要对用户程序产生影响,我们知道,在 L i n u x 64 Linux64 Linux64 位系统中使用 G C C GCC GCC 编译程序时可以选择编译为 32 32 32 位或选择默认编译为 64 64 64 位可执行程序。那么编译器会根据编译参数,同时结合当前OS,即用户所处环境,强制用户程序所遵循的数据模型。

例如:用户在 l i n u x 64 linux64 linux64 下取用默认选项,那么其可执行程序为 64 b i t 64bit 64bit 程序且数据模型为 L P 64 LP64 LP64。同样的,在 w i n d o w 64 window64 window64 下我们使用 V i s u a l S t u d i o Visual \ Studio Visual Studio 指定编译选项为 x 64 x64 x64 时,其数据模型为 L L P 64 LLP64 LLP64。用户指定编译结果为 32 b i t 32bit 32bit 的话则统一编译为数据模型为 I L P 32 ILP32 ILP32 的可执行程序。

OS的数据模型

OS作为一种系统软件其必须遵循一种数据模型。OS的数据模型一定程度上受到硬件架构的影响,其选择的数据模型在所处硬件上必须支持,同时OS可以在范围内有自己的选择,这也导致了 L i n u x Linux Linux W i n d o w s Windows Windows 数据模型的不同。

例如:32位处理器OS可以选择 I L P 32 ILP32 ILP32 L P 32 LP32 LP32 数据模型,但是在 L P 32 LP32 LP32 数据模型中, i n t int int 大小为 16 b i t 16bit 16bit,那么在 i 386 i386 i386 的处理器则不支持,由于在 32 b i t 32bit 32bit 模式下 16 b i t 16bit 16bit 数据的操作码比 32 b i t 32bit 32bit 更长更慢。

例如: L i n u x 64 Linux64 Linux64 遵循 L P 64 LP64 LP64 W i n d o w s 64 Windows64 Windows64 遵循 L L P 64 LLP64 LLP64 数据模型。

参考

原StackOverflow问答地址。希望对大家有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/783594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++教学——从入门到精通 6.ASCII码与字符型

如何把小写字母转换成大写字母呢? 这个问题问的好,首先我们要新学一个类型——char 这个类型就是字符型 再来说说ASCII码 给大家举几个例子 空格————32 0————48 9————57 A————65 Z————90 a————97 z————122 我们…

若依框架学习使用

若依官网项目拉取下来介绍 | RuoYi 项目运行: 1.idea安装,可以运行前后端 编辑器idea、jdk环境安装、数据库mysql、navicat工具、redis(redis-server启动)安装 2.navicat数据库连接, 创建数据库ry-vue并导入数据脚本ry_2021xxxx.sql,qua…

二. CUDA编程入门-Stream与Event

目录 前言0. 简述1. 执行一下我们的第九个CUDA程序2. Stream是什么3. Streams实验(单流vs多流)4. 如何隐藏延迟(memory)5. 如何隐藏延迟(kernel)6. 如何隐藏延迟(kernelmemory)7. 代码分析总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记…

达梦数据库ODBC驱动安装和配置

达梦数据库ODBC驱动安装和配置 ODBC安装和配置测试连接 ODBC安装和配置 将ODBC驱动安装包解压到安装路径下: mv unixODBC-2.3.0.tar.gz /opt cd /opt && tar -zvxf unixODBC-2.3.0.tar.gz 使用root用户编译安装ODBC驱动: cd /opt/unixODBC-2.…

MD5 计算 (下一代加密辅助类, Win32, C++)

CCNGHelper.h #pragma once #include <string> #include <tchar.h> #include <windows.h> #include <bcrypt.h>#ifdef _UNICODE using _tstring std::wstring; #else using _tstring std::string; #endif// 下一代加密辅助类 // 客户端: Windows Vi…

7种2024年算法优化BP,实现回归,单/多变量输入,单/多步预测功能,机器学习预测全家桶再更新!...

截止到本期MATLAB机器学习预测全家桶&#xff0c;一共发了19篇关于机器学习预测代码的文章。算上这一篇&#xff0c;一共20篇&#xff01;参考文章如下&#xff1a; 1.五花八门的机器学习预测&#xff1f;一篇搞定不行吗&#xff1f; 2.机器学习预测全家桶&#xff0c;多步预测…

wails 创建Go 项目

##wails是一个可以让go和web技术编写桌面应用#安装wails go install github.com/wailsapp/wails/v2/cmd/wailslatest#检查环境 wails doctor 创建项目wails init -n AuxiliaryTools -t vue-ts拉取go.mod的依赖项 go mod tidy进入 frontend 前端安装依赖项npm install /pnpm ins…

React组件及组件通讯

组件使用 index.js import { createRoot } from react-dom/client; import App from ./App; const root createRoot(document.querySelector(#root)) root.render(<App />)App.js import Header from ./commponts/Header/index const App () > {return <div&g…

一致性广播、可靠广播、原子广播、安全因果原子广播以及与拜占庭协议结合

在分布式系统中&#xff0c;广播协议是确保信息在网络中的节点之间有效传递的关键机制。一致性广播、可靠广播、原子广播和安全因果原子广播是分布式系统中用于确保消息传递和一致性的四种不同类型的广播协议。它们各自有不同的目标和特性&#xff0c;适用于不同的应用场景。本…

自定义微信红包封面小程序,附带后端源码,快速制作个性化红包封面

此小程序适合流量主引流&#xff0c;赚广告费&#xff0c;适合广流量主&#xff0c;适合流量主。 采用云开发&#xff0c;无需服务器&#xff0c;无需域名。小程序里插入banner广告&#xff0c;插屏广告&#xff0c;视频广告&#xff0c;激励式广告。邀请好友获取抽奖机会&…

医院陪诊管理系统(源码+文档)

TOC) 文件包含内容 1、搭建视频 2、流程图 3、开题报告 4、数据库 5、参考文献 6、服务器接口文件 7、接口文档 8、任务书 9、功能图 10、环境搭建软件 11、十六周指导记录 12、答辩ppt模板 13、技术详解 14、前端后台管理&#xff08;管理端程序&#xff09; 15、项目截图 1…

2024中国(杭州)国际数字物流技术与应用展览会将于7月8日举办

2024中国&#xff08;杭州&#xff09;国际数字物流技术与应用展览会 2024年7月8-10日 | 杭州国际博览中心 同期举办&#xff1a;2024长三角快递物流供应链与技术装备展览会 数字贸易创新引领合作动能 《十四五规划》明确指出关于“加快数字化发展&#xff0c;建设数字中国…

小程序能否替代APP?专业解析在此!

在科技行业&#xff0c;每一次创新都可能引起行业的颠覆性变革。近年来&#xff0c;随着小程序技术的迅猛发展&#xff0c;业界对于它是否将替代传统APP的讨论愈演愈烈。作为一位资深科技行业分析师&#xff0c;我将从多个维度探讨小程序与APP之间的差异&#xff0c;以及它们在…

[leetcode] 哈希表

文章目录 1.有效字母的异位词 E2. 两个数组的交集 E3.快乐数 E 1.有效字母的异位词 E :::details 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异…

Pytorch简明教程01

文章目录 01 Pytorch基础知识1.1 Tensor简介1.2 Tensor的创建1.3 张量的操作1. 运算操作2. 矩阵运算3. 维度变换4. 扩展和压缩维度 1.4 广播机制1.5 梯度计算 01 Pytorch基础知识 主要介绍pytorch中的tensor&#xff0c;包括tensor的创建、基本操作、广播机制等 1.1 Tensor简介…

Windows安装Mysql8

新建Mysql配置文件 my.ini [mysql] # 设置mysql客户端默认字符集 default-character-setutf8 [mysqld] #设置3306端口 port 3306 # 设置mysql的安装目录 basedirD:\\KaiNeng\\mysql-8.0.26-winx64 # 设置mysql数据库的数据的存放目录 datadirD:\\KaiNeng\\m…

爬虫工作量由小到大的思维转变---<第六十四章 > Scrapy利用Bloom过滤器增强爬虫的页面去重效率

前言&#xff1a; 网络爬虫系统是信息时代获取和管理网络数据的重要工具&#xff0c;广泛应用于搜索引擎索引、数据聚合、在线研究等领域。随着网络信息的海量增长&#xff0c;爬虫系统不可避免地会面临重复内容的爬取问题。这不仅浪费了计算资源和网络带宽&#xff0c;而且还会…

24计算机考研调剂 | 中国航天科工集团第三研究所第八三五八研究所

中国航天科工集团第三研究院第八三五八研究所 2024年航天科工集团三院8358所调剂基本要求 一、8358所坐落天津&#xff0c;为定向招生&#xff08;毕业后留所工作&#xff09;&#xff1b; 二、本年度拟调剂名额4-5人&#xff1b; 三、我所接收符合条件的调剂考生&#xff1a;…

代码第三十五天-子集Ⅱ

子集Ⅱ 题目要求 解题思路 回溯法 一般情况下&#xff0c;看到题目要求[所有可能的结果]&#xff0c;而不是[结果的个数]&#xff0c;我们就知道需要暴力搜索所有的可行解了&#xff0c;可以使用[回溯法] 回溯法是一种算法思想&#xff0c;而递归式一种编程方式&#xff0c;回…

Cesium实现渐变面

一、效果图 二、实现思路 使用着色器&#xff0c;通过纹理坐标和其他参数计算出材质的颜色和透明度。通过给定的颜色、漫反射强度和透明度&#xff0c;计算出最终的反射颜色和透明度&#xff0c;并且根据给定的中心点位置和当前像素的纹理坐标&#xff0c;计算出距离中心的距离…