linux c 如何处理大量数据,c – 数据结构存储大量数据?

在我的应用程序中,我必须从一组图像(MRC图像)中加载volumedata,并将像素数据保存在内存中(图像灰度,因此每像素一个字节).

我的开发环境是QT框架,MinGW for Windows和GCC for Linux.

目前,我使用一个简单的数据结构来存储volumedata:

unsigned char *volumeData;

并做一个巨大的分配如下.

volumeData=new unsigned char[imageXsize * imageYsize * numofImages];

以下是在给定平面中访问图像数据的重要方法,例如

unsigned char* getXYPlaneSlice(int z_value);

unsigned char* getYZPlaneSlice(int x_value);

unsigned char* getZXPlaneSlice(int y_value);

利用我简单的数据结构,很容易实现上述方法.

但是,未来我们可能需要采用2000x2000x1000(〜3.7Gb)的卷大小.目前的数据结构将无法处理这么大的数据.

>如何避免碎片化?现在,即使使用1000x1000x200数据,应用程序崩溃也会给bad_alloc.

为此更改数据结构的最佳方法是什么?我应该使用每个块大小为100mb的链接列表.

>此外,用户应该能够对音量数据执行一些图像处理滤波器,并且还应该能够重置为原始像素值.

这意味着我应该保留两个卷数据.

随着目前的实现它的喜欢.

unsigned char * volumeDataOriginal;

unsigned char * volumeDataCurrent;

所以用2000x2000x1000数据范围,它将使用大约8Gb(4Gb的每个卷).

但是在Win32中,地址空间是4GB.如何解决?我应该用64位应用程序?

编辑:

这是我的应用程序的快照

基本上,我加载音量数据(从图像集,从MRC格式.etc),并显示在不同的平面观察者(XY,YX,YZ.Image显示XY平面观察器).我需要保持以上3个数据访问方法来显示特定平面中的图像.使用滑块条用户可以更改要在所选平面中显示的图像)

提前致谢.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值