| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 557 人关注过本帖
标题:C语言优化问题
只看楼主 加入收藏
状态二
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2014-8-31
结帖率:75%
收藏
已结贴  问题点数:13 回复次数:7 
C语言优化问题
新手上路,想请教大神,下面这段程序怎么优化。如果要用到汇编的话,希望大神能说详细点哈,我不太懂汇编


#include<stdio.h>
#include<stdlib.h>

#define BLOCK_SIZE             4

int a[16][16] ;

void forward4x4(int (*block)[16], int (*tblock)[16], int pos_y, int pos_x)
{
  int i, ii;  
  int tmp[16];
  int *pTmp = tmp, *pblock;
  int p0,p1,p2,p3;
  int t0,t1,t2,t3;

  // Horizontal
  for (i=pos_y; i < pos_y + BLOCK_SIZE; i++)
  {
    pblock = &block[i][pos_x];
    p0 = *(pblock++);
    p1 = *(pblock++);
    p2 = *(pblock++);
    p3 = *(pblock  );

    t0 = p0 + p3;
    t1 = p1 + p2;
    t2 = p1 - p2;
    t3 = p0 - p3;

    *(pTmp++) =  t0 + t1;
    *(pTmp++) = (t3 << 1) + t2;
    *(pTmp++) =  t0 - t1;   
    *(pTmp++) =  t3 - (t2 << 1);
  }
   
  // Vertical
   for (i=0; i < BLOCK_SIZE; i++)
  {
    pTmp = tmp + i;
    p0 = *pTmp;
    p1 = *(pTmp += BLOCK_SIZE);
    p2 = *(pTmp += BLOCK_SIZE);
    p3 = *(pTmp += BLOCK_SIZE);

    t0 = p0 + p3;
    t1 = p1 + p2;
    t2 = p1 - p2;
    t3 = p0 - p3;

    ii = pos_x + i;
    tblock[pos_y    ][ii] = t0 +  t1;
    tblock[pos_y + 1][ii] = t2 + (t3 << 1);
    tblock[pos_y + 2][ii] = t0 -  t1;
    tblock[pos_y + 3][ii] = t3 - (t2 << 1);
  }
}

int main(){
   
    int (*b)[16] = a;
    int j,k;

    //input
    freopen("D:/BISHE/input.txt","r",stdin);
    for(j=0;j<16;j++){
        for(k=0;k<16;k++){
            scanf("%d ",&b[j][k]);   
        }
    }
    freopen("CON","r",stdin);
   
     for (j = 0; j < 16; j+=4)
    {
        for (k = 0;k < 16; k+=4)
        {
            forward4x4( b,  b, j, k);
        }
    }
   
    //output
    freopen("D:/BISHE/output1.txt","w",stdout);
    for (j = 0; j < 16; j++)
    {
        for (k = 0;k < 16; k++)
        {
            printf("%d ",a[j][k]);
        }
        printf("\n");
    }
    freopen("CON","w",stdout);
   
    system("pause");
    return 0;   
}
搜索更多相关主题的帖子: C语言 include 新手上路 
2015-02-01 16:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
這種絕對是入了誤區的

授人以渔,不授人以鱼。
2015-02-02 15:13
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:4 
首先想知道,你这段代码是想干啥?

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2015-02-02 15:26
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:4 
嗯,这位小哥不是想虐人就是想自虐
如果是老师要的作业,告诉你一个应付差事的办法:在vc++6里编译,按F11单步,会出现Disassembly窗口,那里都是编译后的汇编代码,全拷贝交作业。

58:   int main(){
004012C0   push        ebp
004012C1   mov         ebp,esp
004012C3   sub         esp,4Ch
004012C6   push        ebx
004012C7   push        esi
004012C8   push        edi
004012C9   lea         edi,[ebp-4Ch]
004012CC   mov         ecx,13h
004012D1   mov         eax,0CCCCCCCCh
004012D6   rep stos    dword ptr [edi]
59:
60:       int (*b)[16] = a;
004012D8   mov         dword ptr [ebp-4],offset a (004295ec)
61:       int j,k;
62:
63:       //input
64:       freopen("D:/BISHE/input.txt","r",stdin);
004012DF   push        offset __iob (00428a30)
004012E4   push        offset string "r" (00426068)
004012E9   push        offset string "D:/BISHE/input.txt" (00426050)
004012EE   call        freopen (004016b0)
004012F3   add         esp,0Ch
65:       for(j=0;j<16;j++){
.
.
.

能编个毛线衣吗?
2015-02-02 15:45
状态二
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2014-8-31
收藏
得分:0 
回复 3楼 waterstar
这是一个离散余弦变换算法,我说的优化是想能不能改写的让这段代码运行的时间更短一点,计算的快一点
2015-02-02 17:30
状态二
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2014-8-31
收藏
得分:0 
回复 4楼 wmf2014
嗯嗯,谢谢
2015-02-02 17:31
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
咦,这是好高大上的项目,数学功底不好的是理解不了的。我们从电脑上看的图片、视频都用到了它,一般都是做8*8变换,你好像是做16*16的变换哦。
这个可以有,汇编一般比c代码少10-20%,速度提高10%(如果熟悉cpu多媒体指令,速度应该更快)。

能编个毛线衣吗?
2015-02-02 18:22
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:4 
原来汇编的意思就是指转assembly,直到今天终于知道了。

不要選我當版主
2015-02-03 00:05
快速回复:C语言优化问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016751 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved