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

    文章

    7591

    浏览量

    135795
  • 代码
    +关注

    关注

    30

    文章

    4719

    浏览量

    68210

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    如何使用反射内存交换机

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

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

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

    内存不够用的处理方法

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

    内存溢出与内存泄漏:定义、区别与解决方案

    内存溢出与内存泄漏:定义、区别与解决方案  内存溢出和内存泄漏是计算机科学中常见的问题,在开发和调试过程中经常会遇到。本文将详细介绍内存溢出
    的头像 发表于 12-19 14:10 2320次阅读

    内存寻址的具体设计

    本文的目的不是介绍内存寻址的具体设计,其实很多细节我也不了解,而是想通过内存寻址的设计思想看看对 FPGA 的设计有什么帮助和借鉴。
    的头像 发表于 12-16 09:25 437次阅读

    unionunion all有什么区别

    UnionUnion All是SQL中的两个关键字,它们用于将两个或多个SELECT语句的结果集合并在一起。这两个关键字虽然有相似的功能,但在实际使用中有一些重要的区别。下面将详细介绍Union
    的头像 发表于 12-06 10:22 1041次阅读

    jvm运行时内存区域划分

    内存区域划分对于了解Java程序的内存使用非常重要,本文将详细介绍JVM运行时的内存区域划分。 JVM运行时内存区域主要划分为以下几个部分
    的头像 发表于 12-05 14:08 487次阅读

    jvm内存分析命令和工具

    JVM内存分析是Java开发和调优过程中非常重要的一部分。通过对JVM内存分析命令和工具的深入了解和使用,可以帮助开发人员识别内存泄漏、性能瓶颈等问题,并对Java应用进行优化。 下面
    的头像 发表于 12-05 11:07 1107次阅读

    jvm内存溢出该如何定位解决

    超出限制和堆空间不足。 定位JVM内存溢出问题是一个比较复杂的任务,需要结合工具和技术来进行分析和解决。本文将介绍一些常用的调试和解决内存溢出问题的工具和技术。 一、理解JVM内存结构 在解决JVM
    的头像 发表于 12-05 11:05 1261次阅读

    无需电流采样电阻的智能电机驱动IC,不来了解一下么?

    无需电流采样电阻的智能电机驱动IC,不来了解一下么?
    的头像 发表于 11-30 17:43 421次阅读
    无需电流采样电阻的智能电机驱动IC,不<b class='flag-5'>来了解</b>一下么?

    内存管理单元的重要功能是什么

    微观理解 内存管理单元(MMU)的一个重要功能是使系统能够运行多个任务,作为独立的程序运行在他们自己的 私有虚拟内存空间。 它们不需要了解系统的物理内存图,即硬件实际使用的地址,也不需
    的头像 发表于 11-26 15:36 608次阅读
    <b class='flag-5'>内存</b>管理单元的重要功能是什么

    java内存溢出排查方法

    过程中常见的问题之一,可能导致应用程序崩溃、性能下降甚至系统崩溃。在本文中,将详细介绍如何排查和解决Java内存溢出问题。 一、什么是Java内存溢出 在开始解决Java内存溢出问题之前,首先需要
    的头像 发表于 11-23 14:46 3024次阅读

    内存池的使用场景

    山中,非常容易出现内存泄漏导致mmo的问题。 为了解决这两个问题,内存池就应运而生了。内存池预先分配一大块内存来做一个
    的头像 发表于 11-10 17:19 648次阅读
    <b class='flag-5'>内存</b>池的使用场景

    内存/闪存大涨价要来了

    需求方面,2023下半年移动DRAM(内存)及NAND Flash闪存(eMMC、UFS)除了受传统旺季带动,华为Mate 60系列等也刺激其他中国智能手机品牌扩大生产目标,短时间内涌入的需求也成为推动第四季度合约价涨势的原因之一。
    的头像 发表于 11-09 16:15 606次阅读