c - 优化/使用指针访问数组

标签 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;

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

最佳答案

通过指针访问数组元素和通过索引访问数组元素没有区别。您可以看到 if 生成汇编代码。索引表示法更简单。

关于c - 优化/使用指针访问数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14291493/

相关文章:

c - 指针:引用第一个元素是否有助于定位整个数组?

java - 无需创建新对象即可创建文本菜单的优化方法

java - 在java中使用apache commons Optimize()的问题

c++ - "variable tracking"占用了我的编译时间!

c - 当端口从 0 变为 1 时,如何添加 90 分钟的延迟?

python - python 的 C 扩展编译失败

c++ - 如何在 Linux 中找到具有写时复制的 fork 进程之间共享多少内存?

c# - JIT 拒绝内联微型方法

c - 使用 if 语句而不是默认的 switch case

c - Perl 脚本什么时候需要在调用 `tzset` 之前调用 `localtime` ?