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语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144696
  • 代码
    +关注

    关注

    30

    文章

    4945

    浏览量

    73212

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    rk基于linux/android内存管理

    一、内存分布   U-Boot 由前级 Loader 加载到 CONFIG_SYS_TEXT_BASE 地址,初始化时会探明当前系统的总内存容 量, 32 位平台上认为最大 4GB 可用(但是不影响
    的头像 发表于 12-15 10:42 17次阅读
    rk基于linux/android<b class='flag-5'>内存</b>管理

    共用体声明

    共用体也称联合体。 和结构体还是有点像: union 共用体名称 { 成员1; 成员2; 成员3; }; 但是两者有本质的不同。共用体的每一个成员共用一段内存,那么这也就意味着它们
    发表于 12-05 07:24

    利用C语言union特性来定义RGB565格式

    本次分享的内容是利用C语言union特性来定义RGB565格式 1)前言 在做视觉相关的任务时,相机的输入一般会是RGB565(uint16_t)的格式,而我们需要把它显式转换成RGB三通
    发表于 10-30 08:26

    RTThread支持内存保护功能吗?

    以前在其他视频里看过说单片机可以实现线程崩溃不会影响系统运行, 我一直不知道怎么实现的, 最近了解到 MPU和Zephyr的内存保护, 这些在RTthread中可以实现吗
    发表于 10-14 07:14

    科普:什么AI 内存技术

    AI 内存是一种专为人工智能 (AI) 应用设计的新型内存技术。与传统的通用内存(如 DDR5 或 LPDDR5)不同,AI 内存的核心目标是解决 AI 计算中遇到的两大挑战:带宽瓶颈
    的头像 发表于 09-03 15:44 797次阅读

    eFUSE内存是如何组织的?

    目前,我正在研究TRAVEO™ 2G - CYT4EN。 我想了解一些与 eFUSE 相关的主题。 1. eFUSE 是控制器访问的物理芯片还是 SOC 的一部分? 2. eFUSE内存是如何组织
    发表于 07-30 07:07

    【HZ-RK3568开发板免费体验】--开发板了解与初探

    感谢合众恒跃与发烧友论坛提供的开发板与平台,收到实物如下 下面来了解下开发板 开发板由底板和核心板组成,核心板基于瑞芯微RK3568J处理器设计,支持图像H.264编解码处理,内置3D GPU可图像
    发表于 06-28 23:42

    一文了解电压谐波

    我们经常会听到谐波,到底什么是谐波,怎么定义的?为什么要关注谐波?什么时候关注谐波?谐波如何计算或标准规定的谐波的算法是怎样的?GB关于电压谐波又是如何评估的?带着诸多的问题,我们一起来了解
    的头像 发表于 06-28 17:23 3905次阅读
    一文<b class='flag-5'>了解</b>电压谐波

    C语言中结构体与联合体的深度解析:内存布局与应用场景

    4字节对齐) 成员访问:通过.运算符独立操作 生命周期:所有成员同时存在 1.2 联合体(Union)的奥秘 联合体通过内存共享机制实现数据复用,其内存大小由最大成员决定: union
    发表于 04-08 09:18

    HBM新技术,横空出世:引领内存芯片创新的新篇章

    在这样的背景下,高带宽存储器(HBM)技术应运而生,以其独特的3D堆叠架构和TSV(硅通孔)技术,为内存芯片行业带来了前所未有的创新。
    的头像 发表于 03-22 10:14 3291次阅读
    HBM新技术,横空出世:引领<b class='flag-5'>内存</b>芯片创新的新篇章

    hyper 内存,Hyper内存:如何监控与优化hyper-v虚拟机的内存使用

    在日常工作中,我们常常需要处理大量的文件和数据,这些重复性任务不仅耗时耗力,还容易因疲劳而导致错误。幸运的是,批量管理工具的出现为这一问题提供了高效的解决方案。今天就为大家介绍Hyper内存
    的头像 发表于 01-24 14:15 1701次阅读
    hyper <b class='flag-5'>内存</b>,Hyper<b class='flag-5'>内存</b>:如何监控与优化hyper-v虚拟机的<b class='flag-5'>内存</b>使用

    国产DDR5内存上市,内存市场价格战一触即发

    随着国产DDR5内存的上市,内存市场的竞争态势即将迎来新的变化。DRAM内存作为半导体产业的明星产品,据市调机构Trendforce预估,2024年全球DRAM内存的产值将达到约907
    的头像 发表于 01-07 15:53 2329次阅读

    颜值与性能俱佳?购买欲点满的墨云藏境内存实力如何

    临近年底,不免要犒劳自己一番,随着双十二大促到来,DIY配件也有好价奉上。趁着这个契机正好升级下内存,毕竟现在挺多游戏对内存频率比较敏感。就目前来说,8000 MT/s这个频段的内存价格已经降下
    的头像 发表于 01-04 10:34 589次阅读
    颜值与性能俱佳?购买欲点满的墨云藏境<b class='flag-5'>内存</b>实力如何

    电磁流量计不能测量什么介质,进来了解

    电磁流量计是一种基于电磁感应原理的流量测量仪表,它能够测量各类导电液体的体积流量。然而,电磁流量计并不能测量所有类型的介质,本文小编带大家简单了解 电磁流量计不能测量什么介质。 (一)含大量气体
    的头像 发表于 12-23 13:20 1146次阅读

    佰维存储发布新一代LPDDR5X内存与DDR5内存模组

    %。同时,LPDDR5X在功耗控制上也表现出色,实现了25%的功耗降低。此外,该产品提供了8GB、12GB、16GB(ES阶段)等多种容量选择,为旗舰智能手机等终端设备带来了卓越的性能与节能优势。 在PC存储领域,佰维存储同样不甘落后,正式发布了DDR5内存模组。其中,超
    的头像 发表于 12-16 13:52 1716次阅读