0

我正在网上评委之一提交我的代码。我的程序被接受。 但是,我的程序的某些部分需要最多10,000个元素的长整型数组。大小在运行时由裁判输入。 我使用动态分配内存:替代动态分配内存?

int *array = new int[size]; 

但在运行时该吃大量的时间。我的执行时间很糟糕,导致排名不佳。 是否有任何考虑到程序的要求,更快地替代动态分配

我不知道为什么,但静态创建数组使用

int array[10000]; 

给了我一个“运行时错误(访问冲突)”

PS(我认为这是一个坏主意) :我只是一个初学者。

+1

确定分配是什么占用了大部分的执行时间? – mclaassen 2014-09-12 19:16:34

+0

您是否测量了整个程序的时间和分配时间(new int [size])? – Yotam 2014-09-12 19:19:54

+0

如果我静态分配内存,我的程序成功处理了10个测试用例,执行时间为0.015秒,但内存分配使它成为0.125秒。 – lazygeek 2014-09-12 19:21:45

回答

0

内存分配是一个相对便宜的操作。除非你连续数十亿次这样做,否则这几乎不是你的性能瓶颈所在。当然,除非你分配太多的内存,它需要不断地交换到磁盘,但我怀疑竞赛的应用程序需要使用那么多的内存。

0

对于现代计算机来说,10000长整数实际上没有太多内存。你应该可以在任何个人电脑上为milisecons分配更多的时间。

但是,静态分配时得到的运行时错误意味着,您的程序可能尝试使用超过10000个数组值。因此,法官可能会在动态分配中分配超过10000个大小的数组?

尝试制作大尺寸的静态数组(记住,畅想多头只有几百兆),并检查是否运行时错误仍然出现