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

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

    关注

    180

    文章

    7561

    浏览量

    133148
  • 代码
    +关注

    关注

    30

    文章

    4635

    浏览量

    67597

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    内存不够用的处理方法

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

    内存寻址的具体设计

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

    unionunionall有什么区别

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

    jvm运行时内存区域划分

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

    jvm内存分析命令和工具

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

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

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

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

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

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

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

    java内存溢出排查方法

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

    内存池的使用场景

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

    内存/闪存大涨价要来了

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

    结构体struct和联合体union的区别?

    结构体struct和联合体 union的区别?
    发表于10-11 08:21

    什么是内存碎片Linux

    什么是 内存碎片? 内存碎片在Linux很早的时候就已经出现了, 了解早期 内存碎片产生的历史,有利于我们对它的理解。 假设现在有一块32MB大小的 内存
    的头像 发表于10-08 10:12 542次阅读
    什么是<b class='flag-5'>内存</b>碎片Linux

    多种角度来了解OBD2

    多种角度 来了解OBD2
    的头像 发表于09-04 09:55 2224次阅读
    多种角度<b class='flag-5'>来了解</b>OBD2