簡體   English   中英

C ++中連續內存的含義是什么?

[英]What is the meaning of contiguous memory in C++?

C ++中連續內存的含義是什么?

這意味着內存被分配為單個塊。 在談論容器時最常使用這種方法。

例如, vectorstring類使用連續的內存塊。 這意味着,如果你有一個包含一個向量int元素123456789 ,那么你可以放心,如果你的指針向量的第一個元素,通過增加此指針,則可以直接進入第二個元素(456),再次遞增它,你將訪問最后一個元素(789)。

std::vector<int> vec = {123, 456, 789};

int* ptr = &vec[0];
*ptr++ == 123; // is true
*ptr++ == 456; // is true
*ptr++ == 789; // is true

另一方面,deque類不保證連續存儲。 這意味着如果你有一個包含相同元素(123,456,789)的雙端隊列,並且你得到一個指向第一個元素的指針,你就不能確定你是通過遞增指針來訪問第二個元素,或者第三個是再次遞增它。

std::deque<int> deque = {123, 456, 789};

int* ptr = &deque[0];
*ptr++ == 132; // true
*ptr++ == 456; // not necessarily true and potentially dangerous
*ptr++ == 789; // not necessarily true and potentially dangerous

非連續數據結構的另一個例子是鏈表。 使用鏈表,增加頭指針可能會返回第二個元素幾乎是不可想象的。

假設您使用C ++良好實踐(例如盡可能多地使用迭代器而不是指針),這很少相關,因為它可以讓集合管理它們存儲項目的方式,而不必擔心它們是如何操作的。 通常,如果必須從C ++代碼調用C代碼,則需要內存連續,因為大多數C函數都設計為使用連續內存,因為這是最簡單的方法。

如果你寫下面的陳述

int arr[3];

然后你要保留3個整數類型的連續存儲單元。 因此,如果我們說整數在內存中保留4個字節,並且第一個存儲單元的地址是1000,那么

內存中arr [0]的地址為1000

內存中arr [1]的地址是1004

內存中arr [2]的地址是1008

它們是一個接一個的連續。 但如果你只是寫

int a,b,c;

你正在保留非連續的存儲單元。 所以“a”的地址可能遠離b和c。 例如

內存中的地址是1000

內存中b的地址是2014

內存中c的地址是2234

它們不是連續的。 就這樣

首先,連續內存意味着分配的內存塊在其占用的地址中沒有任何間隙。 它將是一個單獨的“塊”內存。

C ++中的連續內存意味着在C ++中分配連續內存的各種方式。 一種簡單的方法是C中的數組

int a[10]

std::vectorstd::array (C ++ 11)這樣的STL容器也會分配連續的內存。

連續記憶的意義是連續記憶。 當保留或分配大塊內存時,該內存塊稱為連續內存塊。

暫無
暫無

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

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