簡體   English   中英

C中字符串的內存分配將在哪里進行

[英]Where will the memory allocation for a string in C will take place

對於下面給出的C語句,我想知道內存分配將在哪里進行。

char* ptr="Hello";//ptr is a automatic variable

那么指針變量ptr將分配在堆棧上,但是此字符串“ Hello”將分配在哪里。 是在堆棧上還是在堆上? 還有像char ptr [] =“ Hello”這樣的初始化語句的內存分配呢?

該標准沒有說明(它不了解“堆棧”,“堆”等)。 但實際上答案是:都不是。 字符串文字將存儲在數據部分中,通常存儲在只讀頁面中。

順便提一句,正如Als在評論中提到的那樣,嘗試修改字符串文字是不確定的行為。

對於您示例中的靜態字符串,該字符串實際上並未分配。 在可執行文件本身中為其留出了空間,以上分配僅將“ ptr”設置為該空間的地址。

我不確定這是否取決於實現,但是該字符串通常位於受保護的內存中,因此您無法更改它……只能指向它。

在UNIX中,可以通過在可執行文件上使用“字符串”命令來查看可執行文件中的靜態字符串。

暫無
暫無

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

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