Static toàn cục (static global variables)

Một phần của tài liệu Lý thuyết lập trình C++ (Trang 77 - 78)

- from alpha to omega 4 Trả về giá trị của hàm (returning value from functions)

b. static toàn cục (static global variables)

Các biến được khai báo static toàn cục chỉ “toàn cục” trong phạm vi file mà nó được khai báo. Nghĩa là mặc dù nó là global nhưng nó chỉ được biết đến trong phạm vi file mà nó được khai báo, các đoạn code trong những files khác không thể thao tác được trên nó.

Túm lại cho cả hai loại biến static: từ khóa static cho phép một biến được phép duy trì giá trị của mình trong suốt thời gian chương trình thực thi. Tuy nhiên giới hạn phạm vi của nó vẫn được tuân thủ. Một static cục bộ chỉ được biết đến trong khối lệnh, hoặc hàm mà nó được khai báo, một static toàn cục cũng chỉ được biết đến trong file mà nó được khai báo. Điều

này giúp giảm bớt những hiệu ứng phụ không mong muốn.

Một chú ý nữa cần phải nhắc đến là: mặc dù biến static toàn cục (static global) vẫn hợp lệ và được sử dụng rộng rãi trong lập trình C++ nhưng C++ standard thì lại phản đối sử dụng nó. Thay vào đó người ta khuyến khích sử dụng các phương án khác để kiểm soát truy nhập đến biến toàn cục, trong đó có sử dụng namespace. Mình sẽ nói đến vấn đề namespace trong phần sau.

4. register

register là specifier được sử dụng thường xuyên nhất. Khi một biến được khai báo là register, nó sẽ thông báo cho trình biên dịch biết để lưu trữ biến theo một cách nào đó mà biến có thể được truy cập một cách nhanh nhất có thể. Thông thương biến sẽ được lưu trữ trong thanh ghi (register) hoặc bộ nhớ đệm (cache memory). Truy cập dữ liệu từ register hoặc cache sẽ nhanh hơn truy cập từ bộ nhớ chính (main memory – RAM). Vì vậy biến lưu trữ trong register sẽ được truy cập nhanh hơn nhiều so với khi nó được lưu trữ trong RAM. Tuy nhiên đây chỉ là “gợi ý” yêu cầu compiler lưu trữ biến trong register, còn việc có đáp ứng yêu cầu này hay không thì đó là vấn đề khác. Compiler hoàn toàn có quyền từ chối. Lý do là trong CPU thì lượng thanh ghi là có hạn, và dung lượng của chúng là rất thấp. Vì vậy khi compiler nhận thấy các thanh ghi đã hết, nó sẽ lờ đi yêu cầu register này và chuyển biến tới lưu trữ ở khu vực khác (RAM).

Ta phải lựa chọn hết sức cẩn thận các biến để khai báo register thì mới có thể khai thác tối đa lợi ích về hiệu suất, vì compiler có quyền lờ đi các yêu cầu yêu cầu một lượng quá lớn registers. Thông thường các biến điều khiển vòng lặp hoặc các biến được thao tác bên trong vòng lặp, với tần suất sử dụng nhiều lần, thì nên được khai báo register.

Một phần của tài liệu Lý thuyết lập trình C++ (Trang 77 - 78)

Tải bản đầy đủ (DOCX)

(78 trang)
w