色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何估算結構體和類的大小

Q4MP_gh_c472c21 ? 來源:IT檔案館 ? 作者:IT檔案館 ? 2022-10-13 13:40 ? 次閱讀

你做的模塊,測試反饋說,進去就卡頓,按鈕點擊半天才反應。

這是為什么呢?

要想知道這個問題的答案,首先需要搞懂怎樣估算對象和結構體的大小。

一、如何估算結構體的大小

結構是值類型,它的結構體的實例是存放在棧中或者堆中。

結構體在內存中所占的大小,就是其字段所占的大小,但是,它的大小并不是所有字段大小相加,而是存在一個對齊的規則,在默認的對齊規則中,基本類型字段是按照自身大小對齊的,如byte是按1字節對齊。

struct A
  {
    byte a1;
  }

如上面這個結構體的大小就是1字節,如果是下面這個:

struct A
{
  byte a1;
  int a2;
}

這個結構體所占內存大小是8字節,因為int是4字節對齊的,所以只能從第四個字節開始。

如果再添加一個字段:

struct A
{
byte a1;
int a2;
byte a3;
}

這個結構體大小是12,由于struct本身也要是對齊的,所以它的對齊規則是按照其中元素最大的對齊規則決定的。也就是說上面這個結構體要按照4字節對齊,不足4字節要補齊,所以是12個字節大小

如果想要優化它的大小,可以調整順序如下:

struct A
{
  byte a1;
  byte a3;
  int a2;
}

這個時候這個結構體所占的大小就是8字節了。

二、如何估算類的大小

類是引用類型,它的對象實例存放在堆中,對象實例一定是會占用堆內存的,而在棧中,保存的是實例的引用。對象在堆中分成3個區域,vtable、monitor和字段。

其中vtable是類的共有數據,包含靜態變量和方法表,這個應該就是類本身所占用的大小和具體的對象無關。monitor是線程同步用的,這2個指針分別占用一個inptr.Size大小,字段是從第9個字節或17個字節開始的,字段的對齊規則和結構體的對齊規則相同,區別是Mono中對象的實例會把引用類型的引用放在最前面。一個對象實例的大小就是 inptr.Size *2+字段的大小。

通過調整字段的順序,也可以優化對象的大小。

還可以通過StructLayoutAttribute自定義類和結構體的對齊方式。

[StructLayout(LayoutKind, Sequential, Pack = 1)]
public struct A
 {
  byte a1;
  int a2;
  byte a3;
 }

上面這個結構體強制按照1字節對齊,所以他的大小是6字節,但這樣做可能會降低性能。

所以具體情況還是要具體分析,懂得了如何估算結構體和類的大小,就更容易知道該如何使用它們了。

我們的目標就是讓測試下崗,因為沒有BUG他就沒工作了。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內存
    +關注

    關注

    8

    文章

    3037

    瀏覽量

    74145
  • 對象
    +關注

    關注

    1

    文章

    38

    瀏覽量

    17405
  • 結構體
    +關注

    關注

    1

    文章

    130

    瀏覽量

    10857

原文標題:為什么你寫的代碼占用內存這么大?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言結構(struct)常見使用方法

    ; int c; }相應的,64位機按8字節對齊。不過對齊不是絕對的,用#pragma pack()可以修改對齊,如果改成1,結構大小就是實實在在的成員變量大小的總和了。和C++的
    發表于 08-23 18:18

    C++筆記004:C++通俗點說—— C結構復習

    ` 本帖最后由 tyyhmtyyhm 于 2018-5-12 09:37 編輯 C++通俗點說—— C結構復習核心:C++的就是對C語言的
    發表于 03-05 12:53

    漫談C語言結構

    不是8 byte。  所以,結構成員變量的放置順序影響著結構所占的內存空間的大小。一個結構
    發表于 11-15 15:59

    D功放的功耗估算

    各位大佬,如題,想問下D功放的功耗如何估算。比如TPA3255,48V供電,PBTL時,帶負載2ohm。此時48V需要供電多少電流,TPA3255本身的功耗大概是多少?
    發表于 09-10 19:06

    關于labview傳入參數到DLL結構

    labview給DLL中結構傳入參數,要保證字節對齊下面是注意事項,很關鍵:labview中層次結構數據類型(例如,簇)中的數組和字符串始終包括大小信息。所以簇內存中包含字符串的
    發表于 11-08 20:30

    C語言中創建一個結構其實際占用的內存空間大小是多少呢?

    際占用的內存空間大小是多少呢?示例代碼如下:struct S{int i;char c;int j;};要正確計算結構大小,首先需要了解數據對齊的原理。數據對齊
    發表于 09-29 11:57

    結構的區別與聯系

    是引用類型在堆上分配,的實例進行賦值只是復制了引用,都指向同一段實際對象分配的內存有構造和析構函數可以繼承和被繼承
    發表于 11-20 12:23 ?1.2w次閱讀
    <b class='flag-5'>結構</b><b class='flag-5'>體</b>和<b class='flag-5'>類</b>的區別與聯系

    用于OLAP的視圖大小估算算法比較與分析

    OLAP系統中的視圖物化操作,要求快速、可靠而精確。許多視圖大小估算技術利用特定的統計假設,其誤差可能較大。基于概率的估算方法在速度方面可能較慢,但是在估算大視圖時精確度和可靠度較高,
    發表于 12-12 18:24 ?0次下載

    如何設計只有數據字段的結構

    之前寫過一篇《如何設計一個C++的》,今天這里繼續聊聊如何設計結構,注意本文不介紹在C++中結構
    的頭像 發表于 08-23 09:37 ?1574次閱讀
    如何設計只有數據字段的<b class='flag-5'>結構</b><b class='flag-5'>體</b>

    結構基本用法詳解

      結構就是把相同或者不同類型的便利放到一起,這和C++中的很像,但沒有c++那么復雜,C語言中的結構申明如下。
    的頭像 發表于 02-15 14:52 ?1239次閱讀

    結構大小的獲取

    我們使用sizeof()函數來獲取結構大小
    的頭像 發表于 03-14 17:30 ?1023次閱讀

    C語言計算結構占用的空間大小

    計算以下兩個結構所占空間大小分別是多少?
    發表于 08-24 16:03 ?472次閱讀

    經典 C 語言編程,結構和聯合體如何共用?

    結構 結構占用的內存大小,首先和編譯器的系統位數有關系,類似于CPU是 64 bits 還是 32 bits 的情形;其次,
    的頭像 發表于 01-11 18:24 ?1423次閱讀
    經典 C 語言編程,<b class='flag-5'>結構</b><b class='flag-5'>體</b>和聯合體如何共用?

    你是否真的了解結構占用了多少字節?

    結構成員所占內存空間大小一般情況下,如果想知道結構成員的內存占用情況需要:1、先用結構
    的頭像 發表于 06-04 08:04 ?519次閱讀
    你是否真的了解<b class='flag-5'>結構</b><b class='flag-5'>體</b>占用了多少字節?

    結構成員的順序會影響結構大小

    相同的結構成員,如果把順序調整一下,會不會影響結構大小? 答案是會的,這主要跟字節對齊有關。 比如這樣的
    的頭像 發表于 11-25 16:24 ?214次閱讀
    主站蜘蛛池模板: 国产在线精品亚洲另类| 国产精品乱码色情一区二区视频 | 国产婷婷午夜精品无码A片| 欧美日韩精品一区二区三区四区| 607080老太太AW| 快播最新电影网站| 最近中文字幕高清中文| 老师的丝袜脚| 91久久精品国产亚洲| 美女厕所撒尿ass| 69日本xxⅹxxxxx18| 美女被爆羞羞天美传媒| 99re6久久热在线视频| 暖暖 免费 日本 高清 在线1| 99er久久国产精品在线| 免费看毛片网| 99这里有精品视频视频| 欧洲精品一区二区不卡观看 | 在线广播收听| 精品综合久久久久久8888| 亚洲欧美无码2017在线| 久久超碰国产精品最新| 在线观看国产高清免费不卡| 久久免费看少妇高潮A片特爽| 又硬又粗又大一区二区三区视频| 久久精品亚洲AV无码三区观看| 一个人免费完整在线观看影院| 久久深夜视频| 99久久精品久久久久久清纯| 日本19禁啪啪吃奶大尺度| 国产成人精品视频频| 亚洲精品AV无码重口另类| 久久精品中文闷骚内射| 99热久久视频只有精品6国产| 日日碰狠狠躁久久躁77777| 国产小视频国产精品| 2021年国产精品久久| 天美传媒麻豆精品| 久久久乱码精品亚洲日韩| 99热都是精品| 午夜伦理网|