簡體   English   中英

C ++:什么占用更多內存,將單個字符存儲為char或string?

[英]C++: What takes up more memory, storing a single character as char or string?

我正在編寫代碼,其中根據用戶輸入執行代碼的不同部分。 如果我確定用戶只會輸入一個字符,字符串或char是否會占用更多內存? 一種方法到另一種方法還有其他優點嗎?

編輯:這是我的意思的示例:

using namespace std;
char operation;//or string
cout << "enter the operator (+/=):" << endl;
cin >> operation;
if (operation == '+') {
//do something
}
else {
//do something else
}

一個char占用一個字節。
std::string至少占用sizeof(std::string)個字節,在現代PC上可能為24個字節。

在您的情況下,所保存的內存很可能無關緊要(因為所保存的內存將非常小,可能為23個字節),因此您應該堅持最能說明您意圖的內容。 如果您需要一個字符,那么一個char就很有意義。

什么占用更多內存,將單個字符存儲為char或string?

從定義char是系統上最小的可尋址存儲單元的大小。 因此,沒有任何對象可以占用更少的內存。

字符串是字符序列。 單個元素數組占用的內存與單個元素一樣多:

char c = 'a';
char str[] = {'a'};
assert(sizeof c == sizeof str);

但是,字符串的大多數用法要求字符串以空字符結尾。 正好有一個字符串包含空終止符,並且適合單個字符數組:空字符串。

因此,除非用戶輸入的字符為空,否則字符串必須比單個字符使用更多的內存-如果您需要以空字符結尾。


如果您考慮使用std::string ,那么它除了包含字符本身的緩沖區外,還包含一些指針(在大多數系統上大於一個字節)。 (盡管可以對實現進行優化,以使沒有為小字符串分配外部緩沖區)

一個相對於另一個還有其他優勢嗎?

char相比, std::string的主要優點是前者可以表示任意長度的字符串,而不是單個字符。

暫無
暫無

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

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