作者rbufghj9713 (我只是来潜水)
看板C_and_CPP
标题[问题] 配置大量记忆体
时间Fri May 11 22:11:18 2018
开发平台(Platform): (Ex: Win10, Linux, ...)
Linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
gcc 5.4.0
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
无
问题(Question):
如果今天我需要大量的记忆体做运算,使用new向系统索取空间要分段索取吗?
如:
int *p=new int [40960];
变成(这边的数字只是概念而已)
int *p1 = new int[20480];
int *p2 = new int[20480];
我担心一次索取过大的记忆体会无法配置,请问各位都怎麽处理这种问题?
以上只是闲来无事突然想到,并非现在真的有遇到问题,还请各位不吝指教
*这边是指大量计算所需要的记忆体,如有造成误会在此说声抱歉
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
补充说明(Supplement):
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.249.63.209
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1526047881.A.CF9.html
1F:推 jerryh001: linked list05/11 22:53
谢谢回覆,这边是指一个node里面有很多空间吗?有点像liked list + array这样吗?感
觉好像也是个不错的解法
2F:→ Schottky: 等无法配置再来担心吧,errror checking 记得要做05/11 22:57
3F:→ Schottky: 可以实际写个程式来试试看啊05/11 23:00
了解,谢谢回覆,今天主要想问问看各位有没有什麽要注意的细节(没想到要做error che
cking(掩面)
※ 编辑: rbufghj9713 (111.249.63.209), 05/11/2018 23:08:23
4F:推 littleshan: 其实很多 memory allocator 的实作都是先向作业系统要05/12 00:46
5F:→ littleshan: 一大块再慢慢分,所以如果你的总用量是确定的,05/12 00:47
因为我看有些实作也是这种方法,不过是担心配置太多无法分出一块完整记忆体
6F:→ littleshan: 一开始就直接配置好一大块,效能会比较好05/12 00:48
7F:推 x000032001: 一次要一大块 等到超过oom killer就会出来扫地了05/12 07:52
了解,又学到新东西,谢谢分享
※ 编辑: rbufghj9713 (111.249.63.209), 05/12/2018 15:39:32
8F:→ longlongint: 平常放档案或资料库 要算之前才读出来
05/12 15:38
※ 编辑: rbufghj9713 (111.249.63.209), 05/12/2018 15:40:43
请问这种使用方式在CAD或是需要大量计算的程式上常见吗?还是比较像是某些伺服器内
程式的写法
※ 编辑: rbufghj9713 (111.249.63.209), 05/12/2018 15:42:11
9F:→ longlongint: 如果计算本身吃记忆体要拚速度 还是插记忆体吧 05/12 22:21
谢谢回覆,我加个条件以免大家误会。
※ 编辑: rbufghj9713 (111.249.63.209), 05/13/2018 10:50:12
10F:推 littleshan: 我猜你的疑问是「系统剩余的记忆体没有连续怎麽办」05/14 01:01
11F:→ littleshan: 实际上现代的 OS 都会用 paging 来解决这种问题 05/14 01:01
12F:→ littleshan: 所以一次直接要整块就好,OS 会试图把片段组起来给你 05/14 01:02
是的,因为叙述不清造成大家的困扰了,不过没想到系统会自动做这块,这次学到很多,
谢谢各位大大的回答
※ 编辑: rbufghj9713 (111.249.65.117), 05/14/2018 11:33:00
13F:推 nova06091: 不客气 05/21 17:47