
1 longaiwp 2020-12-03 10:16:57 +08:00 这难道不是意料之中的事情吗?你的问题是为什么会增加还是为什么会增加一半? |
2 0x2CA 2020-12-03 10:20:36 +08:00 32 位编译器: char:1 个字节 char*(即指针变量): 4 个字节( 32 位的寻址空间是 2^32, 即 32 个 bit,也就是 4 个字节。同理 64 位编译器) short int : 2 个字节 int: 4 个字节 unsigned int : 4 个字节 float: 4 个字节 double: 8 个字节 long: 4 个字节 long long: 8 个字节 unsigned long: 4 个字节 64 位编译器: char:1 个字节 char*(即指针变量): 8 个字节 short int : 2 个字节 int: 4 个字节 unsigned int : 4 个字节 float: 4 个字节 double: 8 个字节 long: 8 个字节 long long: 8 个字节 unsigned long: 8 个字节 |
3 shawndev 2020-12-03 10:23:51 +08:00 相同的数据类型会占用更多的内存空间 |
4 Jooooooooo 2020-12-03 10:26:54 +08:00 你原来用 北京市-朝阳区 定位人 现在用 中国-北京市-朝阳区-望京 定位人 写出来占空间更大了吧 |
5 youla OP 如果可以还想问一下,上面的代码写的有问题没??和下面这样写哪个好点??? int len = 255; char[] data=new char[len]; QueryFullProcessImageName(-1, 0, data, ref len); Console.WriteLine(new string(data,0,data.Length).TrimEnd('\0')); |
6 codehz 2020-12-03 10:45:47 +08:00 via Android 显然指针的大小的变化不至于导致 heap alloc 的大小同比例增加,这里的原因是 x64 本身运行时环境自带的 overhead,不过不用担心,很大一部分都是由于调试需要才造成的,release 版本不会相差很多 |
7 jasonkayzk 2020-12-03 10:49:49 +08:00 x86 和 x64 的指针大小都是不一样的; |
8 NNS71L068O2v70DB 2020-12-03 11:09:01 +08:00 指针大小不一致,基础数据类型比如 int 在两个平台上大小不一致,另外我比较好奇,如果是像 go 那种,全部是什么 int32 这种的话。大小会是什么变化 |
9 ysc3839 2020-12-03 12:37:55 +08:00 via Android @youla C# 我不熟悉,但是 C++ 的话是会避免自己 new 之后再拷贝的,比如要把结果保存到 std::string 中的话,会直接 string.resize() 分配空间,然后用 string.data() 获取数据指针,然后直接写进去。 |
11 f6x 2020-12-03 12:46:36 +08:00 硬盘++, 内存+ 耗时- 你选吧. |
12 Jasmine2016 2020-12-03 14:03:55 +08:00 这要从计算机原理说起。。 |
13 qinyusen 2020-12-03 14:20:13 +08:00 去年给校招出的题目就是考察这个的。。。供参考 填空题和简答题 1.对于 32 位系统 sizeof(int) 的值等于`__________` 5 在一个 64 位或 32 操作系统中以下代码输出的结果是(多选)? ``` std::cout<<sizeof(NULL)<<sizeof("NULL")<<std::endl; ``` A 88 B 85 C 44 D 45 7. 写出运行结果: // test1 char str[] = "world"; cout << sizeof(str) << ": "; char *p = str; cout << sizeof(p) << ": "; char i = 10; cout << sizeof(i) << ": "; void *pp = malloc(10); cout << sizeof(pp) << endl; `__________` |
14 dream4ever 2020-12-03 14:31:26 +08:00 别的不说,这增加的是一倍吧?不是一半吧? 10 * 200% = 20,而不是 10 * 150% = 20 |
15 ragnaroks 2020-12-03 14:41:10 +08:00 这个测试不妥当,我有个 dotnet core 的控制台应用程序,32 位下 17M 内存,64 位下 21M,个人理解也就指针占用多了点,其它应该完全相同 |
16 nuk 2020-12-03 14:49:02 +08:00 没看出来这样测试有啥意义,都没分配多少内存,差的就是运行时用的内存吧,起码 GC 里保存的都是 64 位的地址? |
17 ysc3839 2020-12-03 15:09:05 +08:00 via Android @qinyusen 这第五题有问题吧? NULL 具体实现是看编译器的,有的编译器就只是一个 0,此时类型是 int,长度为 4 。 |
18 dadachen1997 2020-12-03 15:14:16 +08:00 因为指针的长度 double 了,在现代的语言里面,每个 object 的 header 包含的指针太多了,基本上 32 到 64 空间占用会多 80% |
19 XDy0 2020-12-03 15:22:37 +08:00 经典面试题。。指针压缩。。。 |
22 muzuiget 2020-12-03 19:50:00 +08:00 内存地址长度也是 64 位啊。 |