一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

Linux愛好者 ? 來(lái)源:嵌入式Linux ? 作者:寫代碼的籃球球癡 ? 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)有什么意見吧?

內(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)容及配圖由入駐作者撰寫或者入駐合作網(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

    文章

    7632

    瀏覽量

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

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70780

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【HZ-RK3568開發(fā)板免費(fèi)體驗(yàn)】--開發(fā)板了解與初探

    感謝合眾恒躍與發(fā)燒友論壇提供的開發(fā)板與平臺(tái),收到實(shí)物如下 下面來(lái)了解下開發(fā)板 開發(fā)板由底板和核心板組成,核心板基于瑞芯微RK3568J處理器設(shè)計(jì),支持圖像H.264編解碼處理,內(nèi)置3D GPU可圖像
    發(fā)表于 06-28 23:42

    C語(yǔ)言中結(jié)構(gòu)體與聯(lián)合體的深度解析:內(nèi)存布局與應(yīng)用場(chǎng)景

    4字節(jié)對(duì)齊) 成員訪問(wèn):通過(guò).運(yùn)算符獨(dú)立操作 生命周期:所有成員同時(shí)存在 1.2 聯(lián)合體(Union)的奧秘 聯(lián)合體通過(guò)內(nèi)存共享機(jī)制實(shí)現(xiàn)數(shù)據(jù)復(fù)用,其內(nèi)存大小由最大成員決定: union
    發(fā)表于 04-08 09:18

    虛擬內(nèi)存不足如何解決 虛擬內(nèi)存和物理內(nèi)存的區(qū)別

    虛擬內(nèi)存不足的解決方案 虛擬內(nèi)存不足是計(jì)算機(jī)用戶經(jīng)常遇到的問(wèn)題,尤其是在運(yùn)行大型軟件或多任務(wù)處理時(shí)。以下是一些解決虛擬內(nèi)存不足問(wèn)題的方法: 增加物理內(nèi)存(RAM) : 這是最直接的解決
    的頭像 發(fā)表于 12-04 09:14 ?1503次閱讀

    虛擬內(nèi)存的作用和原理 如何調(diào)整虛擬內(nèi)存設(shè)置

    虛擬內(nèi)存,也稱為虛擬內(nèi)存管理或頁(yè)面文件,是計(jì)算機(jī)操作系統(tǒng)中的一種內(nèi)存管理技術(shù)。它允許系統(tǒng)使用硬盤空間作為額外的RAM(隨機(jī)存取存儲(chǔ)器),以彌補(bǔ)物理內(nèi)存(RAM)的不足。虛擬
    的頭像 發(fā)表于 12-04 09:13 ?2561次閱讀

    DDR5內(nèi)存與DDR4內(nèi)存性能差異

    DDR5內(nèi)存與DDR4內(nèi)存性能差異 隨著技術(shù)的發(fā)展,內(nèi)存技術(shù)也在不斷進(jìn)步。DDR5內(nèi)存作為新一代的內(nèi)存技術(shù),相較于DDR4
    的頭像 發(fā)表于 11-29 14:58 ?2358次閱讀

    DDR內(nèi)存故障排查方法

    和服務(wù)器中。然而,由于各種原因,DDR內(nèi)存可能會(huì)出現(xiàn)故障,影響計(jì)算機(jī)的正常運(yùn)行。 DDR內(nèi)存故障的常見癥狀 在進(jìn)行故障排查之前,了解DDR內(nèi)存故障的常見癥狀是非常重要的。這些癥狀包括:
    的頭像 發(fā)表于 11-20 14:34 ?2590次閱讀

    如何檢測(cè)DDR內(nèi)存性能

    檢測(cè)DDR內(nèi)存性能是一個(gè)涉及硬件和軟件的綜合過(guò)程,可以通過(guò)以下幾個(gè)步驟來(lái)進(jìn)行: 1. 硬件檢查 1.1 確認(rèn)內(nèi)存規(guī)格 查看內(nèi)存條標(biāo)簽 :檢查內(nèi)存條上的標(biāo)簽,確認(rèn)其規(guī)格,包括DDR類型(
    的頭像 發(fā)表于 11-20 14:30 ?2649次閱讀

    DDR內(nèi)存超頻技巧與注意事項(xiàng)

    青睞。 DDR內(nèi)存超頻技巧 了解內(nèi)存規(guī)格 在進(jìn)行超頻之前,首先需要了解自己內(nèi)存的規(guī)格,包括內(nèi)存
    的頭像 發(fā)表于 11-20 14:27 ?2510次閱讀

    Linux內(nèi)存泄露案例分析和內(nèi)存管理分享

    作者:京東科技 李遵舉 一、問(wèn)題 近期我們運(yùn)維同事接到線上LB(負(fù)載均衡)服務(wù)內(nèi)存報(bào)警,運(yùn)維同事反饋說(shuō)LB集群有部分機(jī)器的內(nèi)存使用率超過(guò)80%,有的甚至超過(guò)90%,而且內(nèi)存使用率還再不停的增長(zhǎng)。接到
    的頭像 發(fā)表于 10-24 16:14 ?1080次閱讀
    Linux<b class='flag-5'>內(nèi)存</b>泄露案例分析和<b class='flag-5'>內(nèi)存</b>管理分享

    內(nèi)存模組n/a怎么解決?

    一、內(nèi)存模組n/a問(wèn)題概述 1.1 內(nèi)存模組的定義 內(nèi)存模組,又稱為RAM(Random Access Memory),是計(jì)算機(jī)系統(tǒng)中用于存儲(chǔ)數(shù)據(jù)的硬件設(shè)備。它允許處理器快速訪問(wèn)和處理數(shù)據(jù),從而
    的頭像 發(fā)表于 10-14 10:44 ?2450次閱讀

    邏輯內(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 ?1810次閱讀

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

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

    內(nèi)存緩沖區(qū)和內(nèi)存的關(guān)系

    內(nèi)存緩沖區(qū)和內(nèi)存之間的關(guān)系是計(jì)算機(jī)體系結(jié)構(gòu)中一個(gè)至關(guān)重要的方面,它們共同協(xié)作以提高數(shù)據(jù)處理的效率和系統(tǒng)的整體性能。
    的頭像 發(fā)表于 09-10 14:38 ?1235次閱讀

    影響內(nèi)存延遲的因素有哪些

    內(nèi)存延遲是指等待對(duì)系統(tǒng)內(nèi)存中存儲(chǔ)數(shù)據(jù)的訪問(wèn)完成時(shí)引起的延期,它是衡量內(nèi)存響應(yīng)速度的重要指標(biāo)。影響內(nèi)存延遲的因素眾多,主要包括硬件因素和軟件因素兩大方面。
    的頭像 發(fā)表于 09-04 11:46 ?3581次閱讀

    內(nèi)存時(shí)鐘是什么意思

    內(nèi)存時(shí)鐘是內(nèi)存模塊中一個(gè)至關(guān)重要的參數(shù),它直接關(guān)聯(lián)到內(nèi)存模塊能夠工作的最高頻率。以下是對(duì)內(nèi)存時(shí)鐘的詳細(xì)解析,包括其定義、作用、與內(nèi)存頻率的關(guān)
    的頭像 發(fā)表于 09-04 11:45 ?2411次閱讀