优化:访问不同内存区域中的指针

时间:2018-04-13 23:18:41

标签: c pointers memory optimization memory-management

假设有以下情况:

int** data = calloc(3, sizeof(int* ));

int* dynamicInt = calloc(1, sizeof(int));
int automaticInt = 0;
int stackint[1] = {0};

data[0] = dynamicInt;
data[1] = &automaticInt;
data[2] = stackint;

然后你会用*data[i]

来浏览价值观

在我看来,从堆跳到堆栈的速度甚至会慢于从堆到堆中的另一个地址。

分配这些指针的最快方法是什么? 真正有用的是,如果有人枚举可能的变化(例如:堆栈堆栈:6(最快),堆堆5,自动自动4,堆栈3等等。)

2 个答案:

答案 0 :(得分:1)

我的意思是它全部在RAM中吗?访问堆栈与堆不是显着不同的性能imho。性能受到影响的地方在于您的空间缓存位置,因为您可能会跳过整个内存并进行缓存未命中。如果你关心性能并且必须使用这样的方案,你可能会通过按指针值(地址)对指针进行排序来获益。但是,如果你的指针变化不大,你仍然可能会从缓存中的时间局部性中受益。不确定这会有所帮助,但那是我的两分钱。

答案 1 :(得分:0)

即使引用的地址被交换了,因为你没有访问它也没有区别