如果malloc一个大于size_t的值怎么办,我该如何写呢
????
23 个解决方案
#1
size_t* len = (size_t*)malloc(sizeof(size_t));
#2
// malloc一个大于size_t的值 ===> malloc一个大于size_t的空间
#3
分多次malloc。
#4
很难分配额到那么大连续空间! sizeof(size_t)一般等于字长。
#5
那得多少G内存噢.
#6
用文件读写模拟内存读写,参考_lseeki64函数。
#7
++
#8
没有办法的
void * malloc(size_t size);
size 受 size_t 表示范围的限制。
也就是说即使你的机器有64G的内存,如果你运行32位程序的话, 地址空间就只有4G,
#9
不可能动作。。。
#10
正解!
#11
机器/编译器也不让你分配这么大的。
#12
如果非要这样操作,赵老师的方法好用。
#13
盖次说 512K 的内存已足够
#14
+1 不可能的。。除非像赵老师的那样,随时写入硬盘。。。
#15
size_t是理论上你能分配的最大内存,所以你不可能malloc一个大于size_t的值。
#16
“货卖识家”啊!总算遇到识货的了!!
#17
32位机上size_t是4个字节,也就是32位,最大值能到4G。肯定够用啊
#18
当需要很大内存时,就要考虑是不是真要必须一下子导入那么多数据。此时如有可能就要换一种算法!可以考虑老赵的方法!
#19
如确有必要,重新封装malloc,用文件内存影射方法在内部重新实现接口模拟内存读写
#20
为什么够用呢?32位机的地址空间只有4G大小,,分配大于4G的内存能够么?~
#21
32位机不可能访问大于4G的内存空间,因为它的地址总线只有32条。2^32=4G。如果要访问大于4G的内存空间,要用64位机。
#22
那不就OK了?64位机的size_t有64位,但问题是现在的CPU基本上的可寻址空间还没达到2^64的级别啊,OS就更不用说了,,所以,LZ的问题的回答就是 不可能了的啊
#23
提醒:如果需要大于整个硬盘空间的存储空间,用_lseeki64也不行。
但可以参考Google的大文件系统。
但可以参考Google的大文件系统。
#1
size_t* len = (size_t*)malloc(sizeof(size_t));
#2
// malloc一个大于size_t的值 ===> malloc一个大于size_t的空间
#3
分多次malloc。
#4
很难分配额到那么大连续空间! sizeof(size_t)一般等于字长。
#5
那得多少G内存噢.
#6
用文件读写模拟内存读写,参考_lseeki64函数。
#7
++
#8
没有办法的
void * malloc(size_t size);
size 受 size_t 表示范围的限制。
也就是说即使你的机器有64G的内存,如果你运行32位程序的话, 地址空间就只有4G,
#9
不可能动作。。。
#10
正解!
#11
机器/编译器也不让你分配这么大的。
#12
如果非要这样操作,赵老师的方法好用。
#13
盖次说 512K 的内存已足够
#14
+1 不可能的。。除非像赵老师的那样,随时写入硬盘。。。
#15
size_t是理论上你能分配的最大内存,所以你不可能malloc一个大于size_t的值。
#16
“货卖识家”啊!总算遇到识货的了!!
#17
32位机上size_t是4个字节,也就是32位,最大值能到4G。肯定够用啊
#18
当需要很大内存时,就要考虑是不是真要必须一下子导入那么多数据。此时如有可能就要换一种算法!可以考虑老赵的方法!
#19
如确有必要,重新封装malloc,用文件内存影射方法在内部重新实现接口模拟内存读写
#20
为什么够用呢?32位机的地址空间只有4G大小,,分配大于4G的内存能够么?~
#21
32位机不可能访问大于4G的内存空间,因为它的地址总线只有32条。2^32=4G。如果要访问大于4G的内存空间,要用64位机。
#22
那不就OK了?64位机的size_t有64位,但问题是现在的CPU基本上的可寻址空间还没达到2^64的级别啊,OS就更不用说了,,所以,LZ的问题的回答就是 不可能了的啊
#23
提醒:如果需要大于整个硬盘空间的存储空间,用_lseeki64也不行。
但可以参考Google的大文件系统。
但可以参考Google的大文件系统。