Trao đổi với tôi

http://www.buidao.com

3/12/10

[Programming] Các kỹ thuật optimize code của VC++ 200x Compiler

Lời nói đầu: Chúng ta học được mấy cái này dù mình code tầm bậy nó cũng optimize cho mình đỡ phải ngồi optimize source code. Đây là vấn đề rất hay cần biết qua.

Tác giả: TQN

Hi all !
Tính tui hay build code trong Release mode rồi open it in IDA để xem code ASM mà VC++ compiler sinh ra. Một thời gian dài, tui đi từ ngạc nhiên này đến các ngạc nhiên khác về kỹ thuật optimize code của VC++ compiler từ 2003 về sau này (2010 tui chưa install, lười rồi).
Dưới đây, tui xin mạo muội trình bày một số kỹ thuật optimize code của VC++ compiler mà tui đã biết và trong các article trên Internet:

1. Loại bỏ biến, code thừa, không dùng, tự tính toán constant:
vd:

C code:


void Func()
{
int A = 2;
int Size = 3 * 8 * A;
UpdateSize(Size * 5);
}

Code qua optimize:

C code:


void Func()
{
UpdateSize(240);
}

Loại bỏ biến A & Size vì A & Size là constant, chỉ khởi gán 1 lần, dùng 1 lần. Nhờ loại A & Size, compiler sẽ không cần sinh mã cấp phát stack cho A & Size. ASM code sẽ nhỏ hơn, nhanh hơn.

2. Loại bỏ các biến copy không dùng

C code:


void f(int g)
{
int j = g;
func(j * 2);
}

Code optimize:

C code:


void f(int g)
{
func(g * 2);
}

Compiler remove biến j vì g chính là j. Loại bỏ j, compiler không còn cần sinh code cấp phát stack cho j nữa.

3. Tự đông sinh code inline cho các function nhỏ (không cần phải declare inline), vd memcpy, strcpy....

4. Còn tiếp...



PS: Khi nào lão ấy viết tiếp tôi sẽ post lên tiếp tục.

reflink: http://forums.congdongcviet.com/showthread.php?p=119898#post119898