在C中有两种分配全局数组的方法:
静态
char data[65536];
Run Code Online (Sandbox Code Playgroud)动态
char *data;
…
data = (char*)malloc(65536); /* or whatever size */
Run Code Online (Sandbox Code Playgroud)问题是,哪种方法有更好的表现?多少钱?
理解它,第一种方法应该更快.
因为使用第二种方法,要访问数组,每次访问时都必须取消引用元素的地址,如下所示:
data包含指向数组开头的指针的变量使用第一种方法,编译器将data变量的地址硬编码到代码中,跳过第一步,因此我们有:
每次存储器访问相当于大约40个CPU时钟周期,因此,使用动态分配,特别是对于不频繁的读取,与静态分配相比可以显着降低性能,因为data可以通过一些更频繁访问的变量从缓存中清除变量.相反,解除引用静态分配的全局变量的成本是0,因为它的地址已经在代码中进行了硬编码.
它是否正确?