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
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
0 nhận xét:
Post a Comment