0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用union來(lái)了解內(nèi)存?

Linux愛(ài)好者 ? 來(lái)源:嵌入式Linux ? 作者:寫(xiě)代碼的籃球球癡 ? 2021-06-22 17:01 ? 次閱讀

今天一個(gè)讀者朋友給我發(fā)的一段代碼,這段代碼讓他有了疑惑。

代碼如下:

#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;

}

這里說(shuō)一個(gè)問(wèn)題,我們從printf上看到的不一定我們想看到的,所以我們需要去變量的內(nèi)存地址一探究竟,一定要了解內(nèi)存的布局,對(duì)內(nèi)存有所了解。

上面注釋的代碼,在我的電腦中運(yùn)行的結(jié)果不相同,所以要看printf的準(zhǔn)確輸出,應(yīng)該初始化變量a。

使用gdb來(lái)查看地址,可以準(zhǔn)確看到變量?jī)?nèi)存中的數(shù)據(jù)。

什么是大小端?

這個(gè)問(wèn)題在之前的文章說(shuō)過(guò),這里再重新提一下

大端模式(Big-endian),是指數(shù)據(jù)的高字節(jié),保存在內(nèi)存的低地址中,而數(shù)據(jù)的低字節(jié),保存在內(nèi)存的高地址中

小端模式(Little-endian),是指數(shù)據(jù)的高字節(jié)保存在內(nèi)存的高地址中,而數(shù)據(jù)的低字節(jié)保存在內(nèi)存的低地址中

我們用這個(gè)再來(lái)看看我們的程序

#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]在高地址,這個(gè)沒(méi)有什么意見(jiàn)吧?

內(nèi)存就是一個(gè)尺子,它是不斷變長(zhǎng)的,所以這個(gè)地址也是慢慢變大的,沒(méi)有任何問(wèn)題吧。

然后,我們可以看看現(xiàn)在的輸出,從上面的輸出可以看到輸出100,也就是j[1]在高地址,j[0]在低地址,那這個(gè)計(jì)算機(jī)就是小端模式。

也可以通過(guò)查看內(nèi)存地址來(lái)確認(rèn)

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7595

    瀏覽量

    135867
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4723

    瀏覽量

    68236

原文標(biāo)題:C 語(yǔ)言,使用 union 了解內(nèi)存

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    邏輯內(nèi)存和物理內(nèi)存的區(qū)別

    邏輯內(nèi)存和物理內(nèi)存是計(jì)算機(jī)系統(tǒng)中兩個(gè)重要的概念,它們?cè)谟?jì)算機(jī)的運(yùn)行和數(shù)據(jù)處理中起著至關(guān)重要的作用。 1. 物理內(nèi)存(Physical Memory) 物理內(nèi)存,也稱為RAM(Rando
    的頭像 發(fā)表于 09-27 15:38 ?352次閱讀

    如何使用反射內(nèi)存交換機(jī)

    反射內(nèi)存交換機(jī)是一種用于實(shí)現(xiàn)高速數(shù)據(jù)共享和通信的關(guān)鍵設(shè)備,以下是關(guān)于如何使用反射內(nèi)存交換機(jī)的詳細(xì)介紹:一、前期準(zhǔn)備?在開(kāi)始使用反射內(nèi)存交換機(jī)之前,需要進(jìn)行以下準(zhǔn)備工作:?1.了解系統(tǒng)需
    發(fā)表于 09-14 09:23 ?0次下載

    內(nèi)存的種類(lèi)都有哪些?有什么區(qū)別?

    內(nèi)存,作為計(jì)算機(jī)中不可或缺的組成部分,承擔(dān)著存儲(chǔ)和交換數(shù)據(jù)的重要任務(wù)。隨著技術(shù)的不斷發(fā)展,內(nèi)存的種類(lèi)也日益豐富,每種類(lèi)型都有其獨(dú)特的特點(diǎn)和適用場(chǎng)景。以下是對(duì)內(nèi)存種類(lèi)及其區(qū)別的詳細(xì)解析,旨在通過(guò)清晰的分類(lèi)和深入的解析,幫助讀者全面
    的頭像 發(fā)表于 07-15 18:15 ?9848次閱讀

    內(nèi)存不夠用的處理方法

    方法來(lái)處理內(nèi)存不足的問(wèn)題。本文將詳細(xì)介紹內(nèi)存不足的原因以及解決的方法。 1. 了解內(nèi)存不足的原因 首先,我們應(yīng)該了解
    的頭像 發(fā)表于 12-28 11:15 ?969次閱讀

    內(nèi)存溢出與內(nèi)存泄漏:定義、區(qū)別與解決方案

    內(nèi)存溢出與內(nèi)存泄漏:定義、區(qū)別與解決方案? 內(nèi)存溢出和內(nèi)存泄漏是計(jì)算機(jī)科學(xué)中常見(jiàn)的問(wèn)題,在開(kāi)發(fā)和調(diào)試過(guò)程中經(jīng)常會(huì)遇到。本文將詳細(xì)介紹內(nèi)存溢出
    的頭像 發(fā)表于 12-19 14:10 ?2356次閱讀

    詳解內(nèi)存條和內(nèi)存顆粒

    在80286時(shí)代,內(nèi)存顆粒(Chip)是直接插在主板上的,叫做DIP(Dual In-line Package)。到了80386時(shí)代,換成1片焊有內(nèi)存顆粒的電路板,叫做SIMM
    的頭像 發(fā)表于 12-16 15:00 ?3710次閱讀
    詳解<b class='flag-5'>內(nèi)存</b>條和<b class='flag-5'>內(nèi)存</b>顆粒

    內(nèi)存尋址的具體設(shè)計(jì)

    本文的目的不是介紹內(nèi)存尋址的具體設(shè)計(jì),其實(shí)很多細(xì)節(jié)我也不了解,而是想通過(guò)內(nèi)存尋址的設(shè)計(jì)思想看看對(duì) FPGA 的設(shè)計(jì)有什么幫助和借鑒。
    的頭像 發(fā)表于 12-16 09:25 ?441次閱讀

    unionunion all有什么區(qū)別

    UnionUnion All是SQL中的兩個(gè)關(guān)鍵字,它們用于將兩個(gè)或多個(gè)SELECT語(yǔ)句的結(jié)果集合并在一起。這兩個(gè)關(guān)鍵字雖然有相似的功能,但在實(shí)際使用中有一些重要的區(qū)別。下面將詳細(xì)介紹Union
    的頭像 發(fā)表于 12-06 10:22 ?1044次閱讀

    weblogic設(shè)置jvm內(nèi)存大小

    如何設(shè)置WebLogic服務(wù)器的JVM內(nèi)存大小。 一、了解JVM內(nèi)存 JVM(Java Virtual Machine)是Java應(yīng)用程序的運(yùn)行環(huán)境。JVM使用一個(gè)被稱為堆(Heap)的內(nèi)存
    的頭像 發(fā)表于 12-05 14:44 ?2868次閱讀

    jvm運(yùn)行時(shí)內(nèi)存區(qū)域劃分

    內(nèi)存區(qū)域劃分對(duì)于了解Java程序的內(nèi)存使用非常重要,本文將詳細(xì)介紹JVM運(yùn)行時(shí)的內(nèi)存區(qū)域劃分。 JVM運(yùn)行時(shí)內(nèi)存區(qū)域主要?jiǎng)澐譃橐韵聨讉€(gè)部分
    的頭像 發(fā)表于 12-05 14:08 ?490次閱讀

    jvm內(nèi)存分析命令和工具

    JVM內(nèi)存分析是Java開(kāi)發(fā)和調(diào)優(yōu)過(guò)程中非常重要的一部分。通過(guò)對(duì)JVM內(nèi)存分析命令和工具的深入了解和使用,可以幫助開(kāi)發(fā)人員識(shí)別內(nèi)存泄漏、性能瓶頸等問(wèn)題,并對(duì)Java應(yīng)用進(jìn)行優(yōu)化。 下面
    的頭像 發(fā)表于 12-05 11:07 ?1109次閱讀

    jvm內(nèi)存溢出該如何定位解決

    超出限制和堆空間不足。 定位JVM內(nèi)存溢出問(wèn)題是一個(gè)比較復(fù)雜的任務(wù),需要結(jié)合工具和技術(shù)來(lái)進(jìn)行分析和解決。本文將介紹一些常用的調(diào)試和解決內(nèi)存溢出問(wèn)題的工具和技術(shù)。 一、理解JVM內(nèi)存結(jié)構(gòu) 在解決JVM
    的頭像 發(fā)表于 12-05 11:05 ?1271次閱讀

    無(wú)需電流采樣電阻的智能電機(jī)驅(qū)動(dòng)IC,不來(lái)了解一下么?

    無(wú)需電流采樣電阻的智能電機(jī)驅(qū)動(dòng)IC,不來(lái)了解一下么?
    的頭像 發(fā)表于 11-30 17:43 ?424次閱讀
    無(wú)需電流采樣電阻的智能電機(jī)驅(qū)動(dòng)IC,不<b class='flag-5'>來(lái)了解</b>一下么?

    內(nèi)存管理單元的重要功能是什么

    微觀理解 內(nèi)存管理單元(MMU)的一個(gè)重要功能是使系統(tǒng)能夠運(yùn)行多個(gè)任務(wù),作為獨(dú)立的程序運(yùn)行在他們自己的 私有虛擬內(nèi)存空間。 它們不需要了解系統(tǒng)的物理內(nèi)存圖,即硬件實(shí)際使用的地址,也不需
    的頭像 發(fā)表于 11-26 15:36 ?615次閱讀
    <b class='flag-5'>內(nèi)存</b>管理單元的重要功能是什么

    java內(nèi)存溢出排查方法

    過(guò)程中常見(jiàn)的問(wèn)題之一,可能導(dǎo)致應(yīng)用程序崩潰、性能下降甚至系統(tǒng)崩潰。在本文中,將詳細(xì)介紹如何排查和解決Java內(nèi)存溢出問(wèn)題。 一、什么是Java內(nèi)存溢出 在開(kāi)始解決Java內(nèi)存溢出問(wèn)題之前,首先需要
    的頭像 發(fā)表于 11-23 14:46 ?3036次閱讀