关于C#内存占用的问题!从几道ACM题中发现的一个问题!

绿色夹克衫 2009-04-09 02:29:20
加精
问题是从http://acm.timus.ru 上的几道题开始的(1220,1275,1306)

http://acm.timus.ru/problem.aspx?space=1&num=1220
http://acm.timus.ru/problem.aspx?space=1&num=1306

这3道题都是不推荐用Java或C#来解的,主要是内存限制的比较严,用c或pascal解,都存在内存使用超标的可能。
需要严谨的计算内存使用,并设计更为精巧的数据结构,才能通过这3道题的test。

可偏有不信邪的高手,于是一个名为Fyodor Menshikov的人出现,他用Java过了1220和1306。(这个人确实有点牛)

于是有几个象我这样常用C#的看到了希望,开始在这几道题上前仆后继,几天前1306的第一个c#方案出现了,是空军同志解的。
自己写了一个c#版的优先队列,确实很不错!受了他的鼓舞,我也用c#过了1306,方法也是大同小异。

在这3道题中,1306应当算是最容易的,给的空间较大,1220就要难不少,而1275比1220又要难上很多,连那个Fyodor Menshikov,
也没能用Java过。

在1306被搞定之后,大家又开始攻克1220,在AC1220的过程中,问题出现了。我做了如下的测试:


using System;

namespace ConsoleApplication2
{
class Program
{
static void Main()
{
}
}
}


一个这样的程序,占用内存为365K,而一个这样的程序占用内存竟然骤增到405K


using System;

namespace ConsoleApplication2
{
class Program
{
static void Main()
{
int[] m = new int[100];
}
}
}


这样的程序竟然只占409k


using System;

namespace ConsoleApplication2
{
class Program
{
static void Main()
{
int[] m = new int[100000];
}
}
}


可是现在却变成了853K


using System;

namespace ConsoleApplication2
{
class Program
{
static void Main()
{
int[] m = new int[100];
for (int i = 0; i < m.Length; i++)
m[i] = (short)i;
}
}
}


按理说100000个整形应当占400K,409+400=809,不应该是853呀!有谁知道是什么原因么?
C#的内存分配管理究竟有什么细节是我们不清楚的,而出现了这样的情况?

btw:现在http://acm.timus.ru/几乎快成了大家搞性能测试的地方了
...全文
3302 140 打赏 收藏 转发到动态 举报
写回复
用AI写文章
140 条回复
切换为时间正序
请发表友善的回复…
发表回复
ylwqhr 2009-12-28
  • 打赏
  • 举报
回复
收藏,学习!~
shangweidenglu 2009-12-03
  • 打赏
  • 举报
回复
mark
G_cofa 2009-12-03
  • 打赏
  • 举报
回复
up!
huximing 2009-10-09
  • 打赏
  • 举报
回复
学习了,正想研究一下性能方面.
yuzhouhuo 2009-09-09
  • 打赏
  • 举报
回复
正为这个问题纠结,看了基本懂了.
鸣宇淳 2009-06-02
  • 打赏
  • 举报
回复
写了一年程序了,也没有这么精打细算地使用内存,看完此贴,感叹颇多!~
amwsse21q 2009-04-14
  • 打赏
  • 举报
回复
UP
zcr88 2009-04-14
  • 打赏
  • 举报
回复
学习
龙宜坡 2009-04-14
  • 打赏
  • 举报
回复
LZ很强大
hangang7403 2009-04-14
  • 打赏
  • 举报
回复
up
WangDbtoCsv 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 129 楼 litaoye 的回复:]
好像都编译好了,最好是源码,否则起不到算法交流的作用!

引用 128 楼 WangDbtoCsv 的回复:
您好!
我用VC++作了一个 如果感兴趣可以下载执行一下。
http://www.lonjxu.com/1220stacks.zip
[/Quote]

才看到你的消息,抱歉回帖不及时。
在我作的程序中,用文件方式代替了指令数组,就像解释型一样(basic)
边解释边执行。
代码粗造,容不公开。
Garnett_KG 2009-04-13
  • 打赏
  • 举报
回复
mark.
绿色夹克衫 2009-04-13
  • 打赏
  • 举报
回复
好像都编译好了,最好是源码,否则起不到算法交流的作用!

[Quote=引用 128 楼 WangDbtoCsv 的回复:]
您好!
我用VC++作了一个 如果感兴趣可以下载执行一下。
http://www.lonjxu.com/1220stacks.zip
[/Quote]
zw_548498 2009-04-13
  • 打赏
  • 举报
回复
牛人是什么样子,快快出现~
WangDbtoCsv 2009-04-13
  • 打赏
  • 举报
回复
您好!
我用VC++作了一个 如果感兴趣可以下载执行一下。
http://www.lonjxu.com/1220stacks.zip
修改一下昵称 2009-04-13
  • 打赏
  • 举报
回复
学习,,

up
compassion 2009-04-13
  • 打赏
  • 举报
回复
很有意思.
wyxddee 2009-04-13
  • 打赏
  • 举报
回复
受打击了。。都不会了。
ligongkel 2009-04-13
  • 打赏
  • 举报
回复
貌似看不懂。。。。
l_9style 2009-04-13
  • 打赏
  • 举报
回复
看看
加载更多回复(116)

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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