2017-01-10 62 views
0

我知道,如果您有编译时变量初始化,程序运行速度比运行时初始化快,因为内存需要动态分配。超出初始开销的运行时分配的影响

我的问题是:动态分配的内存是否会对初始分配开销之外的程序性能产生长期影响?访问动态内存更昂贵吗?我的问题特别是关于Fortran,但它可能也与C等有关。

因此,如果我有一些初始命令行参数来初始化一堆数组的大小以开始计算,是否会显着减慢程序相比,将该参数设置为一个常量参数,并重新编译每次我想用不同大小的数组计算?

+2

怎么样“访问动态内存更便宜吗?”考虑一个_large_静态数组,每个元素初始化为1而非大动态数组,元素分配为1.哪个文件较小?比'malloc()'和'memcpy()'运行需要更多的时间_load_。最好举个例子,否则这只是理论上的。 – chux

回答

1

你在问什么主要取决于系统。有可能有系统可以比动态内存更好地优化静态数据。在FORTRAN委员会因FORTRADA 90憎恶而疯狂的日子之前,FORTRAN全是静态的。 FORTRAN编译器甚至使用静态调用帧也很常见。所有的静态都有更好的性能的理论潜力。这就是说,一旦分配了动态内存,访问它的速度几乎不会比访问几乎所有情况下的静态数据慢。