Thursday, June 5, 2014

The Use of Static Variables - Việc sử dụng các biến tĩnh


Một biến static là gì? Nó là cơ bản một biến toàn cầu mà chỉ có thể được truy cập bởi các hàm nó được khai báo trong

Điều này có nghĩa rằng:


Code:
#include <amxmodx> #include <amxmisc> public plugin_init() {     register_plugin("The Internet","Has","Spoken")         fnDoFunc()     iNum = 2 } fnDoFunc() {     static iNum     iNum = 1 }

Là không hợp lệ. Tại sao? Bởi vì các biến static được tuyên bố trong fnDoFunc, không plugin_init.

Ví dụ trên không tiêu biểu cho sức mạnh thực sự của các biến tĩnh. Nếu bạn chỉ cần đi đến số không trước khi sử dụng nó, sử dụng toán tử "mới". Khai báo một biến mới không phải là một hoạt động đắt tiền, chỉ đơn giản là zeroing của nó là.

Nhưng những gì có thể một biến tĩnh làm gì?

Dưới đây là một ví dụ về việc sử dụng một biến tĩnh so với một biến mới:

Static

Code:
#include <amxmodx> #include <amxmisc> public plugin_init()     register_plugin("The Internet","Has","Spoken") public client_connect(id) {     static szName[33]         get_user_name(id,szName,32)     client_print(0,print_chat,"the matrix has %s",szName) }

New

Code:
#include <amxmodx> #include <amxmisc> public plugin_init()     register_plugin("The Internet","Has","Spoken") public client_connect(id) {     new szName[33]     get_user_name(id,szName,32)     client_print(0,print_chat,"the matrix has %s",szName) }

Nhưng tại sao là phiên bản static nhanh hơn? Vì bộ nhớ không được tạo ra mỗi lần duy nhất nó cần thiết, thay vì nó còn lại ở đó, giống như một biến toàn cầu không bao giờ mất giá trị của nó bao giờ hết sau khi được sử dụng trong một hàm. 

Vì vậy, ví dụ, có trong chuỗi giả thuyết này của các sự kiện trong một máy chủ:

Static

Code:
  static variable initialized
  
  Hawk552 joins server
  client_connect called
  static variable already exists
  get name
  print name
  
  *5 minutes later*
  
  zomg joins server
  client_connect called
  static variable already exists with contents "Hawk552\0..."
  get name -> now looks like "zomg\052\0...", however it ends at the first \0 so the trailing 52 doesn't matter
  print name
New
Code:
  Hawk552 joins server
   client_connect called
  new variable initialized
   get name
   print name
  
  *5 minutes later*
  
  zomg joins server
    client_connect called
   new variable initialized
    get name
    print name
Và đó là lý do tại sao cơ bản biến tĩnh là hữu ích.

0 nhận xét:

Post a Comment