整理一下思路,似乎是这样:按照结构体的原理,这里string应是6byte(不考虑对齐之类按理论算),复制肯定是6byte一起复的(memcpy),最终两份在内存中应是完全不同的空间,因此现在应该考虑初始化的问题,string s = { "Hello" }这个动作,可能也是把静态内存中的"Hello"复制到s空间了。因此有必要再研究这个初始化的操作。
根据C++的原理,直接初始化应是string s("Hello"),这样编译器是不会做复制动作的,而=是做了。楼主用的应该是C++编译器,在C中,这种做法不知会如何。
10楼的现象,是可以解释的:两个地址相差0x02,正好是一个指针尺寸,说明这两个指针并排在一起,但它们所指向的地址,应该也是不同的,但两个地址中的内容却一样。
查看一下,内存中是不是有三份"Hello"。
[ 本帖最后由 TonyDeng 于 2012-4-14 13:24 编辑 ]
根据C++的原理,直接初始化应是string s("Hello"),这样编译器是不会做复制动作的,而=是做了。楼主用的应该是C++编译器,在C中,这种做法不知会如何。
10楼的现象,是可以解释的:两个地址相差0x02,正好是一个指针尺寸,说明这两个指针并排在一起,但它们所指向的地址,应该也是不同的,但两个地址中的内容却一样。
查看一下,内存中是不是有三份"Hello"。
[ 本帖最后由 TonyDeng 于 2012-4-14 13:24 编辑 ]
授人以渔,不授人以鱼。