Ưu điểm và Nhược điểm của Biến Global

Các biến toàn cục (global variable) hay biến global có một tiếng xấu, là chúng có mặt ở mọi chỗ trong mớ code lộn xộn. Chúng liên tục âm mưu với các thế lực bên ngoài không thể giải thích được để kiểm soát luồng code. Chúng không biết ý nghĩa của từ reentrant.*

Thuận tiện và lười biếng không phải là lý do duy nhất để sử dụng các biến global. Chúng thực sự có một mặt tốt. Nhưng trước tiên hãy nói thêm một chút về mặt xấu của nó. Biến global không thể lưu trữ trong thanh ghi (register). Điều đó có nghĩa là nó luôn lấy RAM. Chúng hầu như luôn truy cập chậm hơn so với biến cục bộ (local variable) cũng chính là thanh ghi (register). Vì vậy, nếu bạn có một biến toàn cục (global) có thể được sử dụng làm biến cục bộ (local), thì hãy đặt nó thành biến cục bộ. Ngay cả khi nó nằm trong ngăn xếp (stack) thay vì trong một thanh ghi, một khi chương trình thực thi vượt quá phạm vi (out of scope), chỗ RAM đó sẽ được giải phóng (free) để dùng ở việc khác.

Khi nào một biến global có thể tiết kiệm RAM? Giả sử bạn có một chuỗi hàm (function chain) và cần một biến cụ thể trong một số hàm (hoặc tệ hơn, bạn chỉ cần dữ liệu ra ở cuối chuỗi hàm này).

Nếu bạn truyền dữ liệu qua một tham số (parameter) cho từng hàm trong chuỗi, với quá trình xử lý trung gian, trình biên dịch (compiler) có thể không giữ được dữ liệu này trong một thanh ghi xuyên suốt chuỗi. Vì nó là tham số cho mỗi hàm nên dữ liệu sẽ nằm trong stack nhiều lần. Một biến global nằm ngoài stack và làm ngắn mạch quy trình (short-circuits the process).


Ghi chú: * Một chương trình con (subroutine) bị reentrant nếu nó có thể bị interrupt ở giữa và được gọi lại một cách an toàn trước khi lệnh gọi trước đó của nó hoàn thành.

(Trích trong sách Making Embedded Systems – Chapter 8 : Doing More With Less)

Icons made by Freepik from www.flaticon.com