分配给c代码的内存比它应该使用的要少得多
Memory assigned to c code is much less than it is supposed to use
我是这个论坛的新手。。。
我正在编写一个DSMC C代码,它应该使用500MB的RAM空间,正如我在考虑sizeof(double)==8
和sizeof(int)==4
时计算的那样。然而,当我运行代码时,windows8.1的任务管理器显示code.exe文件只使用了172MB的ram。。为什么会发生这种事?我使用的是10-15个非常长的多维数组,比如。。var_name[3][4050000]
。这让我很担心,因为我需要的结果也不如预期。。
所有变量都定义在main()
之外,并被定义为静态。。。
#define MNC 202500
#define MNM 4050000
#define MNSC 16020000
...
static double PP[3][MNM],PV[3][MNM],CG[6][MNC],CT[MNC],CSS[9],CS[7][MNC],FDPCELL[MNC],FDPCELL1[4][4];
static int IR[MNM],ISCG[2][MNSC],IPL[MNM],ISC[MNSC],IC[2][MNC],DPCELL[MNC],DPCELL1[4][4],n;
static double NCOLM,NROW,NSLC,BMEJ;
static double TIME,FTMP,VFX,VFY,VFZ,VMP,TMPJ,FVJ,SELT,X,Y,Z;
...
int main()
{
...
return 0;
}
如果你们中有人能告诉我这样一个不可预测的错误可能出了什么问题,那就太好了。。。
各种因素都可能导致这种行为:
- 如果这些阵列的某些区域从未被访问过,则在物理内存中永远不会分配相应的内存页
- 您的程序可能不会同时使用所有数组,而且在任何时候都可能只需要每个数组的一小部分;在这种情况下,您的大多数阵列都会从物理内存中交换出来,从而大大减少了其使用量
在没有看到代码的情况下,这些是最可能的原因。
好吧,这可能是代码中的一些问题,而且您确实分配的比您想象的要少。此外,任务管理器显示的是操作系统当前正在"处理"的内容。由于各种原因,操作系统可能尚未分配内存。试着使用所有的内存,看看任务管理器显示的数量是否发生了变化。
为了真正确定编译器分配了多少内存,请生成一个MAP文件,找到符号(var_name
),看看到底分配了多少。
相关文章:
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 为什么示例代码访问IUnknown中已删除的内存
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 以下代码执行哪种内存分配(动态或静态)?
- 为什么以下C++代码中存在内存泄漏?
- 使用 g++7 构建的代码在访问未对齐的内存时崩溃
- 无法找出我的代码中的内存泄漏
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 带有 GDB 调试器的 VS 代码内存视图
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 如何防止使用 std::shared_ptr 的代码中的内存泄漏
- 这行代码中的内存是如何分配"int **v = new int*[n]; "的?
- 在我的以下代码中获取 MLE(内存限制错误).尝试解决 ROUND C 2019(问题 A-摆动行走)启动问题
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 为什么 valgrind 报告两个内存分配,而我的代码只请求一个?
- 如何使用 gcc 通过命令行限制C++代码的内存使用量?
- std::array 模板实例会占用更多的代码内存吗?
- C++OpenMP代码内存泄漏
- 如何将常量放入代码内存中
- Bug在我的代码内存操作