Chinaunix首页 | 论坛 | 博客
  • 博客访问: 285827
  • 博文数量: 124
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 21
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-20 14:44
文章分类

全部博文(124)

文章存档

2020年(1)

2018年(2)

2016年(2)

2015年(6)

2014年(10)

2013年(23)

2012年(7)

2011年(18)

2010年(15)

2009年(8)

2007年(8)

2006年(23)

2005年(1)

我的朋友

分类: C/C++

2013-09-28 21:31:37

1. map中的lement一旦赋值后,是由map自身维护的一个单元,与原来的变量没有任何关系;

点击(此处)折叠或打开

  1. type A struct{
  2.     a int;
  3. }

  4.  var test map[string]A;
  5.    test=make(map[string]A);
  6.    fmt.Println(unsafe.Sizeof(test));
  7.    a:=A{10}
  8.    test["hello"]=a;
  9.    a.a=11;
  10.    fmt.Println(test["hello"]) //此处a的值不会变化,仍为10
  11.    fmt.Println(unsafe.Sizeof(test));//添加元素前后,map的size不变;所以map的element实际存在另为的地方;
通过gdb调试发现,实际test就是一个指针,具体如下:

点击(此处)折叠或打开

  1. (gdb) whatis test
  2. type = map[string]main.A
  3. (gdb) p test
  4. $1 = (map[string]main.A) 0xc200056100
  5. (gdb) whatis *test
  6. type = struct hash
  7. (gdb) print *test
  8. $4 = {count = 0, flags = 16, b = 0 '\000', keysize = 16 '\020',
  9. valuesize = 8 '\b', bucketsize = 208, hash0 = 2050612719, buckets = 0x0,
  10. oldbuckets = 0x0, nevacuate = 0}



阅读(1909) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~