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

    文章

    7649

    浏览量

    146364
  • 代码
    +关注

    关注

    30

    文章

    4983

    浏览量

    74516

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LuatOS的内存分配机制

    不同 LuatOS 硬件平台在内存布局上存在差异,Lua 运行内存、系统内存与 PSRAM 扩展内存的分配方式各有区别。部分型号将系统与脚本内存
    的头像 发表于 04-16 12:37 208次阅读
    LuatOS的<b class='flag-5'>内存</b>分配机制

    DDR5内存断崖式下跌或引发踩踏式抛货?

    内存
    芯广场
    发布于 :2026年03月30日 15:35:23

    MAX1917:DDR内存电源管理的理想选择

    MAX1917:DDR内存电源管理的理想选择 在电子设备的设计中,电源管理是至关重要的一环。特别是对于DDR内存等对电源要求较高的组件,需要一个高效、稳定的电源解决方案。今天,我们就来深入了解一下
    的头像 发表于 03-17 17:15 477次阅读

    MangoTree Halo Ultra「全新PXI」,标配自动纠错内存#

    内存
    芒果树数字
    发布于 :2026年03月06日 15:59:34

    内存条崩了?涨了十倍的内存颗粒卖给谁?内存芯片接下来怎么玩?

    内存
    芯广场
    发布于 :2026年01月26日 17:48:21

    内存持续涨价,多重信号预警成本压力#内存芯片#涨价#行业#消费电子#AI#

    内存芯片
    jf_15747056
    发布于 :2026年01月08日 18:38:35

    rk基于linux/android内存管理

    一、内存分布   U-Boot 由前级 Loader 加载到 CONFIG_SYS_TEXT_BASE 地址,初始化时会探明当前系统的总内存容 量, 32 位平台上认为最大 4GB 可用(但是不影响
    的头像 发表于 12-15 10:42 337次阅读
    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 1762次阅读

    性能优于HBM,超高带宽内存 (X-HBM) 架构来了

    电子发烧友网综合报道,NEO Semiconductor宣布推出全球首款用于AI芯片的超高带宽内存 (X-HBM) 架构。该架构旨在满足生成式AI和高性能计算日益增长的需求,其32Kbit数据总线
    的头像 发表于 08-16 07:51 5230次阅读
    性能优于HBM,超高带宽<b class='flag-5'>内存</b> (X-HBM) 架构<b class='flag-5'>来了</b>!

    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 5433次阅读
    一文<b class='flag-5'>了解</b>电压谐波