0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用union来了解内存?

Linux爱好者 来源:嵌入式Linux 作者:写代码的篮球球痴 2021-06-22 17:01 次阅读

今天一个读者朋友给我发的一段代码,这段代码让他有了疑惑。

代码如下:

#include “stdio.h”int main()

{

typedef union{

short i;

char j[2];

}DATA;

DATA a;

a.j[0] = 10;

a.j[1] = 1;

printf(“%x

”,a.i);

return 0;

}

这里说一个问题,我们从printf上看到的不一定我们想看到的,所以我们需要去变量的内存地址一探究竟,一定要了解内存的布局,对内存有所了解。

上面注释的代码,在我的电脑中运行的结果不相同,所以要看printf的准确输出,应该初始化变量a。

使用gdb来查看地址,可以准确看到变量内存中的数据。

什么是大小端?

这个问题在之前的文章说过,这里再重新提一下

大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中

小端模式(Little-endian),是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中

我们用这个再来看看我们的程序

#include “stdio.h”int main()

{

typedef union{

short i;

char j[2];

}DATA;

DATA a;

//a.j[0] = 10;

a.j[1] = 1;

printf(“%x

”,a.i);

return 0;

}

j[0]在低地址,j[1]在高地址,这个没有什么意见吧?

内存就是一个尺子,它是不断变长的,所以这个地址也是慢慢变大的,没有任何问题吧。

然后,我们可以看看现在的输出,从上面的输出可以看到输出100,也就是j[1]在高地址,j[0]在低地址,那这个计算机就是小端模式。

也可以通过查看内存地址来确认

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136714
  • 代码
    +关注

    关注

    30

    文章

    4780

    浏览量

    68539

原文标题:C 语言,使用 union 了解内存

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    虚拟内存不足如何解决 虚拟内存和物理内存的区别

    虚拟内存不足的解决方案 虚拟内存不足是计算机用户经常遇到的问题,尤其是在运行大型软件或多任务处理时。以下是一些解决虚拟内存不足问题的方法: 增加物理内存(RAM) : 这是最直接的解决
    的头像 发表于 12-04 09:14 367次阅读

    虚拟内存的作用和原理 如何调整虚拟内存设置

    虚拟内存,也称为虚拟内存管理或页面文件,是计算机操作系统中的一种内存管理威廉希尔官方网站 。它允许系统使用硬盘空间作为额外的RAM(随机存取存储器),以弥补物理内存(RAM)的不足。虚拟
    的头像 发表于 12-04 09:13 369次阅读

    DDR5内存与DDR4内存性能差异

    DDR5内存与DDR4内存性能差异 随着威廉希尔官方网站 的发展,内存威廉希尔官方网站 也在不断进步。DDR5内存作为新一代的内存威廉希尔官方网站 ,相较于DDR4
    的头像 发表于 11-29 14:58 325次阅读

    DDR内存故障排查方法

    和服务器中。然而,由于各种原因,DDR内存可能会出现故障,影响计算机的正常运行。 DDR内存故障的常见症状 在进行故障排查之前,了解DDR内存故障的常见症状是非常重要的。这些症状包括:
    的头像 发表于 11-20 14:34 485次阅读

    DDR内存超频技巧与注意事项

    青睐。 DDR内存超频技巧 了解内存规格 在进行超频之前,首先需要了解自己内存的规格,包括内存
    的头像 发表于 11-20 14:27 319次阅读

    Linux内存泄露案例分析和内存管理分享

    作者:京东科技 李遵举 一、问题 近期我们运维同事接到线上LB(负载均衡)服务内存报警,运维同事反馈说LB集群有部分机器的内存使用率超过80%,有的甚至超过90%,而且内存使用率还再不停的增长。接到
    的头像 发表于 10-24 16:14 734次阅读
    Linux<b class='flag-5'>内存</b>泄露案例分析和<b class='flag-5'>内存</b>管理分享

    逻辑内存和物理内存的区别

    逻辑内存和物理内存是计算机系统中两个重要的概念,它们在计算机的运行和数据处理中起着至关重要的作用。 1. 物理内存(Physical Memory) 物理内存,也称为RAM(Rando
    的头像 发表于 09-27 15:38 652次阅读

    如何使用反射内存交换机

    反射内存交换机是一种用于实现高速数据共享和通信的关键设备,以下是关于如何使用反射内存交换机的详细介绍:一、前期准备 在开始使用反射内存交换机之前,需要进行以下准备工作: 1.了解系统需
    发表于 09-14 09:23 0次下载

    内存时钟是什么意思

    内存时钟是内存模块中一个至关重要的参数,它直接关联到内存模块能够工作的最高频率。以下是对内存时钟的详细解析,包括其定义、作用、与内存频率的关
    的头像 发表于 09-04 11:45 1212次阅读

    内存的种类都有哪些?有什么区别?

    内存,作为计算机中不可或缺的组成部分,承担着存储和交换数据的重要任务。随着威廉希尔官方网站 的不断发展,内存的种类也日益丰富,每种类型都有其独特的特点和适用场景。以下是对内存种类及其区别的详细解析,旨在通过清晰的分类和深入的解析,帮助读者全面
    的头像 发表于 07-15 18:15 1.1w次阅读

    C语言内存泄漏问题原理

    内存泄漏问题只有在使用堆内存的时候才会出现,栈内存不存在内存泄漏问题,因为栈内存会自动分配和释放。C语言代码中堆
    发表于 03-19 11:38 521次阅读
    C语言<b class='flag-5'>内存</b>泄漏问题原理

    美光发布DDR5-6000超频内存,支持Intel XMP 3.0

    值得注意的是,尽管英睿达早前已终止电竞超频内存产品线铂胜 Ballistix,却迅速带来了具备散热马甲的 Pro 内存系列,然而此间 Pro 内存产品主要追求即插即用特性,并不涉及超频
    的头像 发表于 02-21 16:06 1006次阅读

    系统内存和运行内存的区别

    系统内存和运行内存都是计算机中重要的概念,它们在计算机的存储和运行方面起着不可或缺的作用。虽然它们与计算机存储和运行息息相关,但是它们具有不同的功能和实现方式。接下来我将详细介绍系统内存和运行
    的头像 发表于 01-15 16:32 3344次阅读

    【飞腾派4G版免费试用】大家来了解飞腾派4G版开发板

    今天把收到的飞腾派4G版开发板做各视频,让大家直观的了解一下做工精细,布线合理,做工扎实的飞腾派4G版开发板。 关于飞腾: 飞腾信息威廉希尔官方网站 有限公司是国内领先的自主核心芯片提供商,致力于飞腾系列
    发表于 01-02 22:43

    内存不够用的处理方法

    方法来处理内存不足的问题。本文将详细介绍内存不足的原因以及解决的方法。 1. 了解内存不足的原因 首先,我们应该了解
    的头像 发表于 12-28 11:15 1054次阅读