相关疑难解决方法(0)

是否更快地访问静态或动态分配的内存?

在C中有两种分配全局数组的方法:

  1. 静态

    char data[65536];
    
    Run Code Online (Sandbox Code Playgroud)
  2. 动态

    char *data;
    …
    data = (char*)malloc(65536);  /* or whatever size */
    
    Run Code Online (Sandbox Code Playgroud)

问题是,哪种方法有更好的表现?多少钱?

理解它,第一种方法应该更快.

因为使用第二种方法,要访问数组,每次访问时都必须取消引用元素的地址,如下所示:

  1. 读取data包含指向数组开头的指针的变量
  2. 计算特定元素的偏移量
  3. 访问元素

使用第一种方法,编译器将data变量的地址硬编码到代码中,跳过第一步,因此我们有:

  1. 从编译时定义的固定地址计算特定元素的偏移量
  2. 访问数组的元素

每次存储器访问相当于大约40个CPU时钟周期,因此,使用动态分配,特别是对于不频繁的读取,与静态分配相比可以显着降低性能,因为data可以通过一些更频繁访问的变量从缓存中清除变量.相反,解除引用静态分配的全局变量的成本是0,因为它的地址已经在代码中进行了硬编码.

它是否正确?

c arrays performance

16
推荐指数
2
解决办法
3253
查看次数

标签 统计

arrays ×1

c ×1

performance ×1