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