【发布时间】:2025-11-26 12:10:01
【问题描述】:
我在具有 4 GB 物理 RAM 的 Windows 7x64 系统上运行此代码:
fileID1 = fopen ('D:\A\B\T3\T11.bin','r');
A1 = fread(fileID1);
fclose(fileID1);
fileID2 = fopen ('D:\A\B\T3\T12_real.bin','r');
A2 = fread(fileID2);
fclose(fileID2);
fileID3 = fopen ('D:\A\B\T3\T12_imag.bin','r');
A3 = fread(fileID3);
fclose(fileID3);
fileID4 = fopen ('D:\A\B\T3\T13_real.bin','r');
A4 = fread(fileID4);
fclose(fileID4);
fileID5 = fopen ('D:\A\B\T3\T13_imag.bin','r');
A5 = fread(fileID5);
fclose(fileID5);
fileID6 = fopen ('D:\A\B\T3\T22.bin','r');
A6 = fread(fileID6);
fclose(fileID6);
fileID7 = fopen ('D:\A\B\T3\T23_real.bin','r');
A7 = fread(fileID7);
fclose(fileID7);
fileID8 = fopen ('D:\A\B\T3\T23_imag.bin','r');
A8 = fread(fileID8);
fclose(fileID8);
fileID9 = fopen ('D:\A\B\T3\T33.bin','r');
A9 = fread(fileID9);
问题是遇到错误:
Error using fread
Out of memory. Type HELP MEMORY for your options.
Error in freeman2coponent (line 24)
A4 = fread(fileID4);
我试图打开的九个文件中的每一个都是一个大小为 159 MB 的文件,它有 162875472x1 个双元素。而且我需要同时在所有九个文件中的一个像素及其邻居的值来进行我的计算。 有没有一种有效的方法来做到这一点?我希望我的代码不会占用太多时间和内存 我用二进制查看器打开了一个文件,这些是文件的内容:
【问题讨论】:
-
你能把像素值转换成 uint8 吗?这可能会节省一些内存。另外,查看 matfile(),它允许您仅在需要时加载部分变量(但可能有点慢)。
-
@adalca 完全正确,实际上通过转换为 uint8 可以节省大量内存——毕竟 159 MB 的文件占用了 1243 MB 的内存。内存映射也是一个好主意,但在这种情况下,您需要的不是
matfile,而是memmapfile。 -
对 memmapfile 的良好调用 - 我没有使用太多,所以首先想到的是 matfile。
标签: performance matlab memory-management