【发布时间】:2013-04-18 06:35:56
【问题描述】:
我正在做一个 c# - c++(管理)混合项目,我们意识到我们的项目中存在内存泄漏,所以我搜索并发现,c++ 部分的析构函数从未调用过,所以我写了一段代码来释放内存。现在我可以看到程序在内存中的增长速度较慢(内存泄漏更多),但问题是,在 c# 部分程序由于“out of memory exception”而开始崩溃。在操作中如
double []k = new double[65536];
程序的内存使用通常看起来是 400-500mb,但它崩溃了。
操作系统:win server 2003
内存:4 GB
操作系统应该让程序增长近 1200 mb,但在我写完空闲内存部分后,它开始崩溃 400-500mb。
我从 c# 部分调用了这个 c++ func 来释放内存
freeMemories()
{
if(!mIsAlreadyFreedMemory)
{
mIsalreadyFreedMemory = true;
_aligned_free(pointerA);
_aligned_free(pointerB);
....
}
}
为什么它不能占用新的内存,程序不能再次占用释放的内存?
【问题讨论】:
-
不是重复的,但这个stackoverflow.com/questions/1391672/… 可能与您的问题有关:考虑从静态数组切换到集合
-
"双 k = 新双 [65536];"这只是一个例子,我的项目中有很多不同的数组分配,所以我不能切换它们,而且它不会崩溃一个精确的点。
-
发布您编写的用于释放内存的代码如何?另外,请注意,由于没有足够大的连续块剩余,当显然有大量可用内存时,内存碎片可能会导致“内存不足”。
-
我添加了 freememory 部分,但问题是没有占用 c++ 内存分配。 (它可以再次对齐内存)。 C#部分不能。
-
double k = new double[65536]在 C# 和 C++ 中都不正确
标签: c# memory-management managed-c++