C++中連續內存的含義是什麼?C++中連續內存的含義是什麼?
回答
這意味着內存被分配爲一個塊。談論容器時,這是最常用的。
例如,vector
和string
類使用連續的內存塊。這意味着如果你有一個包含int
元素的矢量123
,456
,789
,那麼你可以放心,如果你得到指向矢量第一個元素的指針,通過增加這個指針,你將訪問第二個元素(456),然後再次遞增,您將訪問最後一個元素(789)。
std::vector<int> vec = {123, 456, 789};
int* ptr = &vec[0];
*ptr++ == 132; // true
*ptr++ == 456; // true
*ptr++ == 789; // 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個是
[2]在存儲器是1008
它們是連續的,一個接一個的ARR的地址。但如果你只寫
int a,b,c;
你保留非連續的記憶細胞。所以「a」的地址可能遠離b和c。例如
的在存儲器中的地址是1000
B在存儲器中的地址是2014
C在存儲器中的地址是2234
它們是不連續的。這就是全部
首先連續的內存意味着分配的一塊內存,沒有任何它佔用的地址空白。這將是一個單一的「塊」內存。
C++中的連續內存意味着在C++中分配連續內存的各種方式。一種簡單方式是陣列與在C
int a[10]
STL容器等std::vector
和std::array
(C++ 11)也將分配連續的存儲器。
- 1. 什麼是連續內存塊?
- 2. OpenCL內核中__的含義是什麼?
- 3. C中「wild pointer」的含義是什麼?
- 4. C#中「@」的含義是什麼
- 5. C++中[=](...){...}的含義是什麼?
- 6. :: C++中的含義是什麼?
- 7. 「var」在C#中的含義是什麼?
- 8. C#中'this'的含義是什麼?
- 9. C#中「=>」的含義是什麼?
- 10. C++宏中「##」的含義是什麼?
- 11. 「System.IO」在C#中的含義是什麼?
- 12. C++中NULL!= value的含義是什麼?
- 13. C中'=='的含義是什麼?
- 14. PLAT_BINARYFORMATTER在C#中的含義是什麼?
- 15. 推杆的連接含義是什麼?
- 16. %c在GCC內聯彙編代碼中的含義是什麼?
- 17. std :: array中的內存是否連續?
- 18. 在c中如何分配內存,以及爲什麼兩個連續內存之間的差異總是4?
- 19. {$ C PRELOAD}指令的含義是什麼?
- 20. =的含義是什麼?在目標c
- 21. 這是' - >'在c/objective-c中的含義是什麼?
- 22. 在C++中,矢量是否佔用連續的內存插槽?
- 23. 什麼是C「INT常量*」的確切含義是什麼?
- 24. 製作一個內存視圖C連續的Fortran連續
- 25. ARC下sharedInstance模式的內存含義是什麼?
- 26. 爲什麼「數組需要連續的內存塊」是C/C++中數組的壞處?
- 27. 連續的'新'操作符是否連續分配內存?
- 28. 這個類定義在C#中的含義是什麼?
- 29. DTMobileIS的含義是什麼?
- 30. if(';')的含義是什麼?
你也許是指_contiguous_記憶? – 2012-08-01 05:11:51
Ooops。 hahahahahah編輯。 – mister 2012-08-01 05:12:48