簡體   English   中英

通過字符串聲明分配內存

[英]Memory allocation by a string declaration

當我聲明這樣的字符串時:

char string[] = "Hello";

實際上等同於-

char string[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

因此,通過其聲明為字符串分配了堆棧上的內存。 但是當我聲明這樣的字符串時會發生什么:

char *string = "Hello";

變量“字符串”包含字符串“ H”的第一個字母位於內存中的地址。 我想問一下:

  1. 字符串在內存中的位置? 棧\\堆\\等。

  2. 是否為該字符串自動分配了足夠的內存,或者我必須自己為該字符串分配內存(例如,通過malloc )? 如果需要的話,我該怎么做(我想舉一個例子的代碼)?

我想指出,我的問題的答案很有可能取決於系統。 如果是這樣,請注意這一事實,並嘗試根據流行平台(Windows,Linux等)上發生的情況進行回答。

沒有定義char *string = "Hello"; 被儲存了。 實際上,它通常位於稱為文本段的只讀存儲器中,用於存儲程序代碼。 指針存儲在“堆棧”中還是數據段中,具體取決於定義是在函數內部還是在任何函數外部。

您無需執行任何操作即可為字符串分配內存。

答案與系統無關(除非系統可以將字符串存儲在任何方便的位置,並且不同的系統可以將字符串存儲在不同的位置)。

暫無
暫無

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

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