當前位置:首頁 » 編程語言 » c語言結構體占內存大
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言結構體占內存大

發布時間: 2023-06-05 11:38:26

⑴ 為什麼c語言結構體的內存大小是24

指針大小是固定的,與指向的地址內容無關,與機器位數有關。
大小等於機器位長,64位指針大小是8,32位指針大小是4。
如果編譯器設置了對齊,那麼:
64位就是 8*3=24。
32位就是4*3=12。
你再運行看看。

⑵ 我編了一個比較大的C語言程序,運行的時候占內存非常大,這是為什麼呢

我暈,您都說了。。。大量的遞歸,。。。
1000個結構體。。。
這些都放在棧區,如果你用了動態內存(放在堆棧區)可能會好些。

⑶ c語言 結構體 共用體 占內存位元組

你要看看每個變數的位元組對齊方式:這是這題的重點

聯合體:的大小是聯合體中最大的那個變數的佔用空間,因此上述聯合體大小為4

結構體中,在內存分配空間時,首先分配聯合體的空間4位元組,然後當要分配double時,發現double的位元組寬神畝對齊方式是8位元組對齊,因此double c變數不會緊著接聯合體的那個變數分配空間,而是瞎稿會在聯合體後空出4位元組,然後分配,因此得到16位元組=聯合體4位元組+空的4位元組+double8位元組

但是如果改成int ,int的位元組對齊方式是4位元組,聯合體佔用4位元組,其後恰好是慎森4位元組邊界,因此如果用int 則會在聯合體後直接分配空間,就會得到8位元組的大小

⑷ C語言結構體占內存多少

C語言獲取變數、數據類型內存佔多少,使用sizeof運算符即可。


關於結構體所佔的內存多少,一般還要考慮對齊的問題。只所以要進行數據對齊是因為編譯器對結構的存儲的特殊處理能提高CPU存儲變數的速度,一般來說,32位的CPU內存以4位元組對齊,64位的CPU的以8位元組的對齊。一般可以使用#pragma pack()來指出對齊的位元組數。比如下面的代碼,在debug會顯示結構體test的內存大小為28,如果生成release版則所佔內存大小為32 。

#include<stdio.h>

#ifdef_DEBUG
#pragmapack(4)
structtest
{
charx[13];//13
intd;//4
doublef;//8
}ss;
#else
#pragmapack(8)
structtest
{
charx[13];//13
intd;//4
doublef;//8
}ss;
#endif

intmain(void){

printf("%d ",sizeof(ss));
return0;
}

⑸ C語言中結構體佔用內存大小的問題

不會,同一個結構體佔用的內存都是一樣的,
stOne和stTwo之所以不同,是因為內存對齊問題。
取內存時,是按照主機系統是多少位來取的
32位系統,每次取四個位元組
64位系統,每次取8個位元組
根據你sizeof得到的結果,你的系統是32位的,所以每次取四個位元組,而stOne char類型佔用一個,而int佔用四個,所以char類型自動佔用了4個,否則,如果char佔用一個,取得時候,去了一個char,然後去了int變數的前三個,這樣會出問題,所以,會得到你上面sizeof的結果
stTwo,就不會因為是兩個char類型挨著的,這樣兩個char類型佔用四個,取得時候先取兩個char,再取int。

⑹ C語言,結構體問題所佔內在位元組數,怎麼算的

在c語言中如何計算結構體長度和共用體長度?
結構體的長度等於體內各個成員變數長度之後。如此題長度為字元串數組的長度加上兩個int型變數的長度,再加上double長度,最後結果為10+2+2+8=22。解析:char 每個字元佔一個位元組(因為是一個十長度的字元數組)所以是10位元組,int占兩個位元組,double佔8個位元組。所以最後是10+2*2+8=22。
共用體的長度是體內成員中最長的長度。如果一個共用體內最長長度為12位元組,則共用體的長度就是12。
希望能夠幫到你。如果還有什麼問題在問?

⑺ c語言結構體存儲大小

分配內存時,編譯器考慮同結構里最寬的元素類型對齊,或4 位元組對齊。
struct
{
int i; // 這里 最寬的元素類型 是 int -- 4 位元組
char b; // 所以給它分配1位元組後,再浪費3個位元組,湊成4位元組
}numb;
所以一共用8個位元組。

⑻ C語言結構體數組為什麼會過大(我都只開了2個!!)

「Image」就是指編譯後的程序文件,在對程序鏈接時就是程序在內存時的映像,因此這
么稱呼。
在某些操作系統下,這種程序文件可以直接作為內存映像載入內存。
在其他操作系統中,這些文件的結構比較復雜,不僅僅是內存映像那麼簡單,可能包含
定位信息、和程序代碼有關的外部符號信息等(就像咱們用的MS Windwos)。
Windows95 和 SP3 之前的 WindowsNT 4.0 無法處理超過256MB的可執行文件(就是無法
執行),後續版本可以處理的最大范圍約 1.75GB,如果顯示的文件大小是負數,表示文
件超過了 2GB,需要用64位的處理器和操作系統或者減小數組大小。
在現在的Windows操作系統中,一般可以忽略上述警告,程序可以直接運行而不會出現問
題。
網路來的兩個方法,沒試。
1)好好利用公共模塊mola,數組最好用動態的,用完就釋放;
2)把虛擬內存搞大一些就沒關系。

⑼ c語言 結構體 共用體 占內存位元組

共用體:
sizeof(union
data1)的值為16.在編譯器默認設置的情況下,該共用體最大基本類型為double,它佔8位元組,所以此共用體以8來對齊。字元數組c2佔9個位元組,那麼整個共用體應該佔9個位元組,但按照對齊原則,實際分配給它的內存為16位元組。
結構體:
struct
data以8個位元組對齊,long類型的成員1分配8個位元組。s、i、c、a原本分別佔4、2、1、10個位元組。由於考慮到對齊,s分配4個位元組,i分配
2個位元組,c分配2個位元組,此時剛好用完8個位元組。a原本分配10個位元組,由於考慮到對齊,要使整個結構體所佔的存儲空間是8的倍數,所以分配給它16個位元組。因此結構體data佔8+4+4+2+16=32個位元組。