优化/使用指针访问数组

时间:2013-01-12 08:00:14

标签: c optimization

我有一个关于优化的练习。我需要优化旋转和成像45度的程序。我知道使用指针访问数组效率更高,所以我尝试了下面的更改 - 原始代码:

RGB* nrgb = (RGB *)malloc(imgSizeXY*3);//3=sizeof(RGB)
//...
for (i=imgSizeY-1; i>=0; --i)
    {
        for (j=imgSizeX-1; j>=0; --j)
        {
                //...
                int y=(i*imgSizeX+j);
                nrgb[y].r = *imgInd; //*imgInd computed earlier

变化:

    RGB* nrgb = (RGB *)malloc(imgSizeXY*3);//3=sizeof(RGB)
    RGB* rgbInd = nrgb+imgSizeXY-1;
    for (i=imgSizeY-1; i>=0; --i)
    {
        for (j=imgSizeX-1; j>=0; --j)
        {
              rgbInd->r=*imgInd;
              --rgbInd;

但是当使用指针时,程序会产生错误的输出。我已经盯着它看了几个小时,但仍然不知道为什么。有任何想法吗?非常感谢你!

2 个答案:

答案 0 :(得分:2)

指针访问数组元素和索引访问之间没有区别。你可以看到,如果生成汇编代码。索引更加简单。

答案 1 :(得分:0)

L1缓存命中比L2缓存命中快一个数量级,L2缓存命中本身比主存储器访问快一个数量级。见Numbers Every Computer Scientist Should Know。对于图像操作,您希望自己必须进行大量的内存读写操作,因此在优化代码时,您应该主要关注缓存效率。

因此,专注于寻找更有效地使用缓存的方法,并且不要太担心编译器没有优化优化简单的指针算法。

相关问题