用于 const char 指针的内存位置与用于动态内存分配的内存位置的差异

Difference in memory location that is used for const char pointer and one that is used for dynamic memory allocation

提问人:Himawari.Ksm 提问时间:11/14/2023 最后编辑:molbdniloHimawari.Ksm 更新时间:11/16/2023 访问量:96

问:

用于 const char 指针的内存位置和用于动态内存分配的内存位置是否不同?

例如,当您这样做时

const char* city = "Paris";

char city[6] = "Paris";
char* c = new char[strlen(city) + 1];

city 和 c 的值都为“Paris”,但它们是否使用不同类型的内存来存储这些值?

C++ 内存 堆内存

评论

2赞 NathanOliver 11/14/2023
通常是这样,但没有要求。这听起来像是一个 XY 问题。这些信息有什么用?知道这一点后,你想完成什么?
2赞 463035818_is_not_an_ai 11/14/2023
“城市和c都有”巴黎“的价值”,不,他们没有。
0赞 Himawari.Ksm 11/14/2023
@NathanOliver我最初试图弄清楚DMA究竟是如何工作的。通常,当您在编译之前不知道数组的确切大小时,会使用它。但是,查看使用 DMA 的示例,您可以使用 const char* 来分配字符串,并且不需要指定字符串的大小,这与 char 数组不同,我很困惑为什么我们需要使用 DMA 为 const char* 类型的变量指定字符串的大小。带着这种困惑,我正在研究 ABC 指针数组。要理解这一点,我需要先知道 DMA 究竟是如何工作的。
4赞 Pepijn Kramer 11/14/2023
DMA 表示“直接内存访问”,而不是“动态内存分配”。
2赞 PaulMcKenzie 11/14/2023
DMA的意思是“直接内存访问”——对于新程序员来说,使用与计算机世界其他部分已知的首字母缩略词不匹配的首字母缩略词似乎是一种趋势,然后新程序员不会读取恰好符合他们错误假设的标签。例如,“dsa”表示“数据结构和算法”,现在“dma”表示“动态内存分配”。@OP -- 在将其应用于您的问题时,请阅读标签。对直接内存访问 () 感兴趣的人现在会将您的问题显示在他们的列表中。dma

答:

0赞 Hugh Granger 11/16/2023 #1
const char* city = "Paris";

最有可能在只读内存中

char city[6] = "Paris";

静态存储(堆栈或全局变量)

char* c = new char[strlen(city) + 1];

存储在堆/可用存储中(因此需要编辑)delete