變數之間的差異是顯著的

2021-07-25 15:24:24 字數 1933 閱讀 9593

正如您在第2.1課中學到的--基本定址和變數定義,現代機器上的記憶體通常被組織成位元組大小的單元,每個單元具有唯一的位址.。在這一點上,它是有用的認為記憶是一束分支或郵箱,我們可以把和檢索資訊,和變數作為訪問這些分支或郵箱名稱。

然而,這種模擬在乙個方面並不十分正確,大多數變數實際上占用了超過1位元組的記憶體.。因此,乙個變數可以使用2,4,甚至連續8個記憶體位址.。變數使用的記憶體量取決於它的資料型別.。幸運的是,因為我們通常通過變數名而不是記憶體位址訪問記憶體,編譯器在很大程度上能夠隱藏與我們使用不同大小變數的細節.。

有幾個原因可以知道變數占用了多少記憶體.。

首先,變數占用的記憶體越多,它可以容納的資訊越多。因為每個位只能持有0或1,我們說,位元可以容納2個可能的值。

2位可以容納4個可能的值:

td::cout << "bool:\t\t" << sizeof(bool) << " bytes" << std::endl;

std::cout << "char:\t\t" << sizeof(char) << " bytes" << std::endl;

std::cout << "wchar_t:\t" << sizeof(wchar_t) << " bytes" << std::endl;

std::cout << "char16_t:\t" << sizeof(char16_t) << " bytes" << std::endl; // c++11, may not be supported by your compiler

std::cout << "char32_t:\t" << sizeof(char32_t) << " bytes" << std::endl; // c++11, may not be supported by your compiler

std::cout << "short:\t\t" << sizeof(short) << " bytes" << std::endl;

std::cout << "int:\t\t" << sizeof(int) << " bytes" << std::endl;

std::cout << "long:\t\t" << sizeof(long) << " bytes" << std::endl;

std::cout << "long long:\t" << sizeof(long long) << " bytes" << std::endl; // c++11, may not be supported by your compiler

std::cout << "float:\t\t" << sizeof(float) << " bytes" << std::endl;

std::cout << "double:\t\t" << sizeof(double) << " bytes" << std::endl;

std::cout << "long double:\t" << sizeof(long double) << " bytes" << std::endl;

o概括,變數n位可以容納2n(2到n,通常也寫了2 ^ n)的權力可能值。因為乙個位元組是8位,乙個位元組可以儲存28(256)可能的值。

變數的大小限制了它可以儲存的資訊量--利用更多位元組的變數可以容納更廣泛的值.。我們將進一步解決這個問題,當我們進入不同型別的變數。

其次,計算機有有限數量的自由記憶體。每當我們宣告乙個變數時,只要這個變數存在,這個自由記憶體的一小部分就被使用了.。因為現代計算機有大量的記憶體,這通常不是問題,特別是如果只宣告一些變數.。然而,對於需要大量變數(如100000)的程式,使用1位元組和8位元組變數之間的差異是顯著的.。

然而,你可能在你的系統變數的大發現(尤其是int,這通常是4位元組)。

c++的基本資料型別的大小

下乙個問題是「不同資料型別的變數需要多少記憶體?「。您可能會驚奇地發現給定資料型別的大小依賴於編譯器和/或計算機體系結構.!

c++保證基本資料型別都會有乙個最小尺寸:

bind apply call之間的差異

假定存在如下的上下文與函式 待測試的上下文 var context 待測試的函式 function output name,hello 上下文繫結後的引數必須是陣列 上下文後的就是引數列表 alert output.call context,call hi 輸出hi,call 函式繫結bind後並沒...

DOM和SAX之間的差異

有一些初始化資料以及測試資料,這些資料使用 xml檔案的方式儲存,所以需使用 dom4j 來解釋這些 xml文件,並將其中的資料初始化到資料庫中 他們都是 解析xml檔案的 dom一次全部讀進來 sax只會解析一點 dom 基於物件模型,在建立 document 物件的時候,就針對整個 xml文件生...

Html XHTML 與 HTML 之間的差異

首先要說,xhtml比html好更規範,但用dw的時候還是沒有太去注意。最主要的不同 1.xhtml 元素必須被正確地巢狀。在 xhtml 中,所有的元素必須像這樣彼此正確地巢狀 this text is bold and italic 在巢狀列表中乙個容易犯的錯誤,是忘記內部列表必須位於 li 元...