- 相關(guān)推薦
如何優(yōu)化C程序性能
一段c程序,功能開(kāi)發(fā)完成,開(kāi)始性能優(yōu)化。下面是小編為大家搜索整理的如何優(yōu)化C程序性能,希望大家能有所收獲,更多精彩內(nèi)容請(qǐng)及時(shí)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!
當(dāng)然是先用 -pg 編譯,再gprof看“熱點(diǎn)”在哪里,很快找到,是計(jì)算hash值的函數(shù),于是換了個(gè)更快的hash函數(shù)——fnv (http://isthe.com /chongo/tech/comp/fnv/),速度提高了一些。接著把該hash函數(shù)內(nèi)聯(lián)(inline),程序又快了一些。內(nèi)聯(lián)函數(shù)不是解決性能問(wèn)題的靈丹妙藥,因?yàn)閕nline之后gprof就看不到該函數(shù)的調(diào)用情況,也就不好找真正的性能瓶頸了。
接著把幾個(gè)常用循環(huán)中的變量聲明為register,即優(yōu)先使用寄存器,嗯,有點(diǎn)效果,但不是很明顯。管它的,快一點(diǎn)是一點(diǎn)。
最后把代碼部分優(yōu)化完,改編譯參數(shù)了:
將 -O2 改為 -O3 ,跑了單元測(cè)試,沒(méi)問(wèn)題,性能好一點(diǎn)
加 -march=nocona ,性能又好一點(diǎn)(因?yàn)殚_(kāi)發(fā)的程序只在服務(wù)器上跑,而公司的服務(wù)器都裝intel的CPU,而且都是新到貨,基本都是nocona平臺(tái),所以加上沒(méi)問(wèn)題)
加 -minline-all-stringops , 據(jù)說(shuō)這個(gè)選項(xiàng)適合含有memset、memcpy語(yǔ)句較多的程序,這個(gè)正合我意,加上之后性能有好了一點(diǎn)
全部?jī)?yōu)化完了,查詢400萬(wàn)的數(shù)據(jù),從原先的4.9秒變?yōu)?.1秒,16%左右的性能提升,雖然不卓著,但性能就是錢啊,省錢是多么快樂(lè)的事啊....
【相關(guān)閱讀】
結(jié)構(gòu)成員訪問(wèn)方法有哪些
[cpp] view plaincopy
#include "stdio.h"
#include "string.h"
#include
main ()
{
struct student{
int num;
char * name;
int score;
}stu;
struct student *p=&stu;
stu.num=1;
(*p).name="tom";
p->score=78;
printf("%d\n",p->num);
printf("%s\n",p->name);
printf("%d\n",p->score);
}
【如何優(yōu)化C程序性能】相關(guān)文章:
PHP程序性能優(yōu)化的方法10-29
如何優(yōu)化C語(yǔ)言(單片機(jī))06-01
C語(yǔ)言如何提高程序效率04-10
c語(yǔ)言入門經(jīng)典程序08-01
c語(yǔ)言如何設(shè)置程序進(jìn)程執(zhí)行優(yōu)先權(quán)10-27
c語(yǔ)言鏈接程序08-26
C語(yǔ)言程序試題04-26