gpt4 book ai didi

c++ - C和C++对内存的误解

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:38 25 4
gpt4 key购买 nike

拜托,我想知道在C语言中变量、数组和字符串是如何存储在内存中的。请在下面的示例中纠正我对内存的理解:

在 C 中,当我们声明一个字符串时,我们按以下方式进行:

char string[]="string";

内存中发生了什么?每个字符是否存储在内存中并且每一格内存都有它的地址?

例如地址

1600 char[0]='S'
1602 char[2]='t'

等等。这是真的?如果没有,请给我一个真实情况的正确模式。

我的第二个问题是关于 C++ 的:在 C++ 中,他们发明了一种新的数据类型,即 string。例如:

string variable("This is a string");

这个文本(“这是一个字符串”)是如何存储在内存中的?

最佳答案

查看 Strings in Depth :

[...] The exact implementation of memory layout for the string class is not defined by the C++ Standard. This architecture is intended to be flexible enough to allow differing implementations by compiler vendors, yet guarantee predictable behavior for users. [...]

[...] In C++, individual string objects may or may not occupy unique physical regions of memory, but if reference counting is used to avoid storing duplicate copies of data, the individual objects must look and act as though they do exclusively own unique regions of storage. [...]

您可以通过以下方式了解您的编译器如何实现string。对我来说(VS2010下测试),会是

string variable("This is a string");
printf("%p\n", &variable[0]); // 006751C0
printf("%p\n", &variable[1]); // 006751C1
printf("%p\n", &variable[2]); // 006751C2
printf("%p\n", &variable[3]); // 006751C3
printf("%p\n", &variable[4]); // 006751C4
printf("%p\n", &variable[5]); // 006751C5
... ...

关于c++ - C和C++对内存的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21355139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com