+1 thích
429 đã xem
trong Kiến thức CNPM bởi (1.2k điểm)
Xin chào thầy cô, anh chị và các bạn,

Em có đọc trên mạng về inline và macro, nhưng không hiểu. Em muốn biết nó hoạt động như thế nào và có nên dùng nó để chương trình nhanh hơn không?

Cám ơn thầy cô, anh chị và các bạn đã quan tâm!

1 Câu trả lời

+5 k thích
bởi (4.8k điểm)
đã được chọn bởi
 
Hay nhất
Trong C/C++, một hàm mà được inline, và bạn gọi hàm đó ở các vị trí đâu đó, thì khi compile, compiler sẽ thay thế những chỗ đó bằng chính đoạn code trong hàm inline, và xử lý trực tiếp luôn chứ không gọi hàm.

Lợi ích: tránh chi phí overhead mỗi lần gọi hàm trong C/C++, chi phí đó bao gồm tạo stack frame, đưa các giá trị thanh ghi vào stack, truyền tham số vào stack, tăng con trỏ stack…và đó mới chỉ là chi phí khi gọi, overhead bao gồm chi phí khi kết thúc hàm nữa. Vì thế nếu một hàm được gọi rất nhiều lần (trong các vòng lặp lồng nhau chẳng hạn) thì chi phí overhead có thể đáng kể và chậm hơn rõ rệt so với inline hàm đó.

Khuyết điểm: nếu hàm cần inline có code rất dài mà chương trình của bạn không gọi hàm đó nhiều lần lắm mà gọi ở nhiều nơi thì khi biên dịch code của hàm đó được chèn nhiều chỗ khiến chương trình dung lượng lớn hơn.

May mắn là theo mình tìm hiểu, các compiler C/C++ hiện giờ đủ thông minh để tự động nên hay không nên inline một cách hiệu quả. Việc bạn dung cú pháp “inline” chẳng qua chỉ là “gợi ý” cho compiler thôi, muốn nó bắt buộc inline hàm nào đó thì dùng “__forceinline”

Macro là tên đại diện của một đoạn code nào đó (giống như VND đại diện cho Việt Nam Đồng ấy ^^), được cài đặt bằng #define. Mục tiêu của nó là giúp lập trình viên viết nhanh các đoạn code lặp đi lặp lại nhiều nhưng có cấu trúc giống nhau. Chẳng hạn:

//với mỗi(mảng, vị trí)
#define voimoi(mang, vitri) for(vitri = 0; vitri < mang.size(); vitri++)

int main() {

std∷vector<int> m;

int i;
voimoi(m, i)
            printf(“%d ”, m[i]);

Tóm lại, inline giúp chương trình bạn chạy nhanh hơn (nên để compiler tự động) và macro giúp bạn viết code nhanh hơn (và có thể khả quang, đọc dễ hiểu hơn tùy mình cài đặt)
Chào mừng đến với Q&A FIT. Bạn có thể đặt câu hỏi và nhận được câu trả lời từ các bộ phận hỗ trợ và những thành viên khác tại Khoa Công nghệ Thông tin, Trường Đại học Khoa học Tự nhiên, Đại học Quốc gia TP.HCM. Bạn hãy đăng nhập bằng tài khoản Google để gửi hoặc trả lời các câu hỏi.
...