Trong C++, biến cục bộ luôn được cấp phát trên ngăn xếp. Ngăn xếp là một phần của bộ nhớ được phép mà ứng dụng của bạn có thể chiếm. Bộ nhớ đó được lưu trong bộ nhớ RAM của bạn (nếu không được chuyển đổi sang đĩa). Bây giờ, trình biên dịch C++ có tạo mã lắp ráp lưu trữ các biến cục bộ trên ngăn xếp không?C++ CPU Đăng ký sử dụng
Lấy ví dụ, đoạn code đơn giản sau đây:
int foo(int n) {
return ++n;
}
Trong mã lắp ráp MIPS, điều này có thể trông như thế này:
foo:
addi $v0, $a0, 1
jr $ra
Như bạn thấy, tôi không cần phải sử dụng ngăn xếp ở tất cả cho n. Trình biên dịch C++ có nhận ra điều đó và trực tiếp sử dụng thanh ghi của CPU không?
Chỉnh sửa: Rất tiếc, cảm ơn rất nhiều câu trả lời gần như ngay lập tức và mở rộng của bạn! Phần thân hàm của foo dĩ nhiên là return ++n;
, không phải là return n++;
. :)
Trình biên dịch sẽ tối ưu hóa. Hãy thử 'gcc -fverbose-asm -O2 -S yoursource.c' rồi xem bên trong' yoursource.s' –