windows下如何分配非常大的连续内存空间

MousePanda 2014-07-31 04:22:52
OpenGL在载入纹理之前,需要把贴图的像素读入到内存中。如果这张图非常庞大,就需要分配一块大的连续的内存空间。我在使用c++的new操作符的时候,经常会出现无法分配如此大的内存空间而造成抛异常的现象。哪位大神能帮忙解决此问题?
...全文
506 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zilaishuichina 2014-08-01
  • 打赏
  • 举报
回复
引用 13 楼 EXPRG 的回复:
[quote=引用 10 楼 zilaishuichina 的回复:] [quote=引用 9 楼 EXPRG 的回复:] [quote=引用 6 楼 zilaishuichina 的回复:] [quote=引用 4 楼 EXPRG 的回复:] [quote=引用 3 楼 lovesmiles 的回复:] 纹理贴图要贴一张100M的图,也确实是大了点... 不过要new 100M的内存,应该不至于没有吧?你的程序已经很耗内存了吗?
从堆上分配一块连续100M的内存空间,已经不小了把~反正经常抛异常~~~~求指教[/quote] 如果一定要连续的话, 不要动态分配, 程序一开始就分配好, 如果程序一开始都分配不出来100M,那就不要run了。[/quote]关键在与图片的大小本来就是未知的,不管怎么样都要动态分配的。[/quote] 你可以设置一个最大值嘛 [/quote]载入纹理啊,设置一个最大值不行把?[/quote] 为什么不行呢? 比如最大允许读一个100M以内的图片, 你就程序一开始就开辟100M,对于超过100M的图片要么提示用户无法加载,要么用一个小于100M的默认图片替代 我相信你加载纹理的函数应该是有一个参数表示图片的长宽的, 或者直接表示图片buf的长度的,这样一个参数的 那么不管多大的图片,加载之前先读到这个100M的内存里面,然后再把这个内存传给你的加载纹理的函数,即使100M要比你实际图片大小大,只要把图片的长宽参数控制好就可以。 如果你有多个很大的纹理需要读取,并且同时显示,那就多开辟几个100M
MousePanda 2014-08-01
  • 打赏
  • 举报
回复
引用 10 楼 zilaishuichina 的回复:
[quote=引用 9 楼 EXPRG 的回复:] [quote=引用 6 楼 zilaishuichina 的回复:] [quote=引用 4 楼 EXPRG 的回复:] [quote=引用 3 楼 lovesmiles 的回复:] 纹理贴图要贴一张100M的图,也确实是大了点... 不过要new 100M的内存,应该不至于没有吧?你的程序已经很耗内存了吗?
从堆上分配一块连续100M的内存空间,已经不小了把~反正经常抛异常~~~~求指教[/quote] 如果一定要连续的话, 不要动态分配, 程序一开始就分配好, 如果程序一开始都分配不出来100M,那就不要run了。[/quote]关键在与图片的大小本来就是未知的,不管怎么样都要动态分配的。[/quote] 你可以设置一个最大值嘛 [/quote]载入纹理啊,设置一个最大值不行把?
IS小白 2014-08-01
  • 打赏
  • 举报
回复
非要载入吗?可以试试内存映射
赵4老师 2014-08-01
  • 打赏
  • 举报
回复
试试GlobalAlloc
mLee79 2014-08-01
  • 打赏
  • 举报
回复
100M 怎么就大了, 偶本子上 10个8个G一般还是没啥问题的..
「已注销」 2014-07-31
  • 打赏
  • 举报
回复
lz牛,100M的图片。开眼了。
zilaishuichina 2014-07-31
  • 打赏
  • 举报
回复
引用 9 楼 EXPRG 的回复:
[quote=引用 6 楼 zilaishuichina 的回复:] [quote=引用 4 楼 EXPRG 的回复:] [quote=引用 3 楼 lovesmiles 的回复:] 纹理贴图要贴一张100M的图,也确实是大了点... 不过要new 100M的内存,应该不至于没有吧?你的程序已经很耗内存了吗?
从堆上分配一块连续100M的内存空间,已经不小了把~反正经常抛异常~~~~求指教[/quote] 如果一定要连续的话, 不要动态分配, 程序一开始就分配好, 如果程序一开始都分配不出来100M,那就不要run了。[/quote]关键在与图片的大小本来就是未知的,不管怎么样都要动态分配的。[/quote] 你可以设置一个最大值嘛
MousePanda 2014-07-31
  • 打赏
  • 举报
回复
引用 6 楼 zilaishuichina 的回复:
[quote=引用 4 楼 EXPRG 的回复:] [quote=引用 3 楼 lovesmiles 的回复:] 纹理贴图要贴一张100M的图,也确实是大了点... 不过要new 100M的内存,应该不至于没有吧?你的程序已经很耗内存了吗?
从堆上分配一块连续100M的内存空间,已经不小了把~反正经常抛异常~~~~求指教[/quote] 如果一定要连续的话, 不要动态分配, 程序一开始就分配好, 如果程序一开始都分配不出来100M,那就不要run了。[/quote]关键在与图片的大小本来就是未知的,不管怎么样都要动态分配的。
碼上道 2014-07-31
  • 打赏
  • 举报
回复
程序启动的时候就分配好,不要经常释放。
mujiok2003 2014-07-31
  • 打赏
  • 举报
回复
try: 1. 全局变量 2 . 局部静态静态 3. 多线程环境中用线程局部存储
zilaishuichina 2014-07-31
  • 打赏
  • 举报
回复
引用 4 楼 EXPRG 的回复:
[quote=引用 3 楼 lovesmiles 的回复:] 纹理贴图要贴一张100M的图,也确实是大了点... 不过要new 100M的内存,应该不至于没有吧?你的程序已经很耗内存了吗?
从堆上分配一块连续100M的内存空间,已经不小了把~反正经常抛异常~~~~求指教[/quote] 如果一定要连续的话, 不要动态分配, 程序一开始就分配好, 如果程序一开始都分配不出来100M,那就不要run了。
MousePanda 2014-07-31
  • 打赏
  • 举报
回复
引用 3 楼 lovesmiles 的回复:
纹理贴图要贴一张100M的图,也确实是大了点... 不过要new 100M的内存,应该不至于没有吧?你的程序已经很耗内存了吗?
从堆上分配一块连续100M的内存空间,已经不小了把~反正经常抛异常~~~~求指教
勤奋的小游侠 2014-07-31
  • 打赏
  • 举报
回复
纹理贴图要贴一张100M的图,也确实是大了点... 不过要new 100M的内存,应该不至于没有吧?你的程序已经很耗内存了吗?
MousePanda 2014-07-31
  • 打赏
  • 举报
回复
引用 1 楼 lovesmiles 的回复:
到底多大?可以透露一下吧?
5000*5000的图片,将近100M,唉~~
勤奋的小游侠 2014-07-31
  • 打赏
  • 举报
回复
到底多大?可以透露一下吧?

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧