簡體   English   中英

常量有多少分配的空間?

[英]How much allocated space do constants have?

我的 IT 老師說在 C 和 C++ 中為常量分配空間時只分配嚴格必要的空間:他說如果我們將值 12 存儲在常量中,例如,只會分配 4 位內存. 我相信這不是真的,因為內存幾乎總是被分成 8 位“單元”,而且因為當我們聲明一個常量時,我​​們也會指明它的類型,所以我們決定為它分配多少內存。 有專家意見嗎?

PS:他說的是用const限定符聲明的const

當然你的 IT 老師是錯誤的。 大小取決於 const 值的類型 但是您還必須記住,如果不需要任何對象,優化編譯器可以刪除它們。

兩者都是因為內存幾乎總是被分成 8 位“單元”

那是數據存儲器通常在 8 位單元中。

在 C 中int x = 12時,未指定常量12 作為數據存儲在內存中。 所需要的只是x取值為 12 - 不知何故。

12 可以作為指令的一部分嵌入 - 可能只有幾位。

一些指令集允許將小值存儲在發出的代碼的幾位而不是內存中,因此使用零字節的數據內存。

這通常發生在像 0 這樣的特殊值上。沒有 0 存儲在某處占用 8 位數據,因為可能有一條指令來簡單地“清除” x

我的 IT 老師說在 C 和 C++ 中為常量分配空間時只分配嚴格必要的空間:他說如果我們將值 12 存儲在常量中,例如,只會分配 4 位內存.

如果真的是導師說的,那確實沒有任何理由。

這對我來說毫無意義,因為內存幾乎總是被分成 8 位“單元”,而且因為當我們聲明一個常量時,我​​們也會指明它的類型,所以我們決定為它分配多少內存。 有專家意見嗎?

C 和 C++ 語言標准都沒有為這種說法提供任何理由,並且在實踐中,它沒有描述現實世界的實現。

但實際上,在我們開始之前,需要對聲明聲明的條款提出質疑。 在 C 中,“常量”是出現在源代碼中的文字數字或空指針值。 語言實現可以自由地以代數方式組合常量,將它們編碼為指令而不是數據,並執行其他轉換,這實際上意味着常量根本不對應於任何存儲。 常量在運行時內存中確實有相應的表示,該表示確實受系統架構的約束,我不知道當前的任何計算機架構可以以小於 8 位的單位尋址存儲。

如果我們假設,但是,而不是教練認為是公然錯了,有代替某種誤解的,一種方式來描述存儲由小於8位的:結構類型可以有成員被稱為“位域”,其中有整數類型和指定的位數。 例子:

struct example {
    unsigned int two_bits:2;
};

位字段本身是不可尋址的——您可能不會對它們應用地址運算符 ( & )——並且該語言承認它們的存儲是一個或多個匿名“可尋址存儲單元”的一部分,這些單元通常更大,但是結構對象的每個位域成員的表示被定義為由為其聲明的特定位數組成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM