Comic
Fay's Diary Comic
Kanji Transformer Series
Our Android Apps
Paper Toy
Animation
Dharma Cartoon
Figure Photo Collection
Flash Game
Embedded Systems
Old Work
Toy & Gadget
Game & Software
About Us
Links
Ataya's Embedded Systems Blog
Green Tea Story
Play with BeagleBoneBlack
Studio Wallpaper
Studio Wallpaper
The Sky Flower & The Temple Dog
Written
by
: Ataya P
Date : 12 June 2007
Language : Thai
ไปไงกันบ้า งครับ
กับบภ—ความการ Optimize ซอร์สโค้ดเ มื่อครั้งก ่อน
หวังภ§่าคงช่วยใภ«้ทุกๆท่าน๠€ขียนโปรแกภ£มได้อย่างภ¡ีประสิทธิภาพมากขึ้นภ™ะครับ
คราวà ¸™ี้จะเป็นเà ¸£ื่องการปรà ¸±บแต่งในส่à ¸§นของ Local variable และ Function
call กันบ้างน ะครับ ลองทดลองดู ว่าได้ผลเป ็นยังไงกัน
ก็บอกกล่าภ§กันได้นะคภ£ับผม (^_^)/"
->Minimize Local Variable
หากจำนวน Lacal Variable ในฟังก์ ชันของเราม ีการประกาศ ไว้น้อย compiler สามารถที่จ ะใส่ค่าของ Local
Variable เหล่านั้นไ ว้ใน Register ได้โดยตรง&nb sp;
ซึ่งจะ๠€ป็นการเพิ๠ˆมประสิทธิภาพอย่างมหภ²ศาลอันเนื๠ˆองมาจาก
# เนื่องจากค ่าของ
Local
Variable อยู่ใน Register จึงสามารถเ ข้าถึงได้โ ดยตรง ไม่ต้องอ้า งอิงจาก
Memory (ซึ่งมีการ๠€ข้าถึงที่ภŠ้ากว่ามาก)
# หากมี Local Variable
ในฟังก์ชัภ™เป็นจำนวนภ™้อยๆก็จะไภ¡่ต้องประสภšปัญหาOverhead ในการเก็บค ่าคงใน
Stack ซึ่งจะอาจเ กิดขึ้นได้ ตอนที่ Setting up function และ Store frame
buffer
-> Declare Local Variables In The Inner Most Scope
ไม่ควรปร ะกาศ Local
Variable ไว้นอกเหนื อขอบเขตการ ใช้งาน
เราภˆะได้ประสิภ—ธิภาพที่ดภµกว่า หากเอา Local Variable ไว้ในขอบเข ตที่ใช้งาน
(เนื่องจากà ¹„ม่ต้องทำ Constructor โดยไม่จำเป ็นหากไม่ได ้มีการใช้ง าน Local
Variable นั้นๆ)
int fool(char * pName) int good(char * pName)
{ A a; { :
: :
if(pName == NULL) if(pName == NULL)
{ { A a;
dosomething(a) ; dosomething(a);
return ERROR; ====> return ERROR;
} }
: :
: :
return SUCCESS; return SUCCESS;
} }
-> Reduce the number of parameter
การ Call ฟังก์ชันà ¹‚ดยมีการส่à ¸‡ค่า parameters
จำนวนมà ¸²กๆจะเป็นกà ¸²รถ่วงประสà ¸´ทธิภาพการà ¸—ำงานอย่างà ¸¡าก เนื่องจากต ้อง Load
parameter ทั้งหมดลง Stack ก่อนในการ Call แต่ละครั้ง
ดังนั้นด้ภ§ยเหตุผลดัภ‡กล่าวมาแล๠‰ว จึงไม่ควรท ี่จะส่ง Stucture เป็น
paremeter แบบตรงๆ แต่ควรจะใช ้ pointer ในการส่งแบ บ reference แทน
int fool(structA a, sturctB b,int c , int d, .....) { } ======> int good( structA * a,int value) { }
-> Use References For Parameter Passing And Return Value For Types Bigger Than 4 Bytes
ในการ Passing parameters เป็นเรà ¸·่องปกติทีà ¹ˆค่าของ Parameter จะถูก Copy ลงใน Stack (
สำหรับ parameter ที่เป็นชนิ ด Interger ,Pointer เป็นต้น
ซึ๠ˆงจะมีขนาดภˆำกัดอยู่ไภ¡่เกิน 4 Byte ) แต่หาก parameter ที่ทำการ Passing
มีขนาดใà ¸«ญ่มากกว่า 4 Byte แล้วละก็จะ เป็นการเพิ ่ม Overhead
อย่างมา กในการนำค่ าเหล่านี้ล งใน Stack (ในกรณีของ Class จะเป็นการเ พิ่ม
Overhead ในส่วนของก ารสร้าง Constructor ซึ่งจะต้อง ทำการ Destructor
ด้วยเมà ¸·่อออกจากFunc tion ที่เรียกใช ้งาน)
เป็นการดีก ว่า ถ้าจะจะใช้ การ passing
parameter แบบ Reference สำหรับparameter ที่มีขนาดใ หญ่กว่า 4
Byte เนื่องจากจ ะไม่เกิด Overhead จากการสร ้าง
Temporary Object, Copy และ Destructor (อนึ่ง ในการส่งค่ า
Return จากฟังก์ชั น หากส่งค่าท ี่มีขนาดให ญ่มากๆก็จะ มีปัญหา Overhead
เช่นเดี ยวกัน)
-> Don't Define A Return Value If Not Used
หาก Function ที่ถูกเรีย ก
ไม่ได้จำ๠€ป็นที่จะต๠‰องส่งค่า Return ทุกครั้ง
เภ£าควรหลีกเภ¥ี่ยงด้วยกภ²รไม่ทำการ Define Return Value หากไม่มีกา รใช้งาน
int test(int x)
{ //int N
if(x == 0) return 1;
if(x == 1) return 2;
:
:
// return N;
Date : 12 June 2007
Language : Thai
ไปไงกันบ้า
->Minimize Local Variable
หากจำนวน Lacal Variable ในฟังก์
# เนื่องจากค
# หากมี Local Variable
-> Declare Local Variables In The Inner Most Scope
ไม่ควรปร
int fool(char * pName) int good(char * pName)
{ A a; { :
: :
if(pName == NULL) if(pName == NULL)
{ { A a;
dosomething(a) ; dosomething(a);
return ERROR; ====> return ERROR;
} }
: :
: :
return SUCCESS; return SUCCESS;
} }
-> Reduce the number of parameter
การ Call ฟังก์ชันà
int fool(structA a, sturctB b,int c , int d, .....) { } ======> int good( structA * a,int value) { }
-> Use References For Parameter Passing And Return Value For Types Bigger Than 4 Bytes
ในการ Passing parameters เป็นเรà
เป็นการดีก
-> Don't Define A Return Value If Not Used
หาก Function ที่ถูกเรีย
int test(int x)
{ //int N
if(x == 0) return 1;
if(x == 1) return 2;
:
:
// return N;
- Login to post comments
Custom Search
