Làm cách nào tôi có thể giải phóng ngăn xếp lua?quản lý bộ nhớ lua
Trả lời
Tôi nghĩ bạn cần lua_remove
? Tôi chỉ lướt qua hướng dẫn sử dụng, không chắc chắn nếu có một chức năng "rõ ràng toàn bộ ngăn xếp".
void lua_remove (lua_State *L, int index);
Loại bỏ các yếu tố ở các chỉ số có giá trị nhất định, chuyển xuống các yếu tố trên chỉ số này để lấp đầy khoảng trống. Không thể được gọi với một chỉ mục giả, vì một chỉ mục giả không phải là một vị trí ngăn xếp thực tế.
Về cơ bản, cách duy nhất tôi biết để giải phóng toàn bộ ngăn xếp lua là gọi lua_close trên cá thể lua_State.
Tại sao bạn muốn thực hiện việc này?
Nếu bạn cần xóa tất cả các phần tử trong ngăn xếp Lua, bạn nên gọi lua_settop(L, 0)
. Để báo manual:
void lua_settop (lua_State *L, int index);
Chấp nhận bất kỳ chỉ số chấp nhận được, hoặc 0, và đặt ngăn xếp trên xuống chỉ số này. Nếu đầu mới lớn hơn cái cũ, thì các phần tử mới được lấp đầy bằng không. Nếu chỉ mục là 0, thì tất cả các phần tử ngăn xếp sẽ bị xóa.
Điều này sẽ tùy thuộc vào tất cả các yếu tố trong bộ sưu tập chồng lên thùng rác. Hãy gọi lua_gc(LUA_GC_COLLECT)
sau đó để thực hiện thu gom rác. Nếu bạn thực sự cần thu thập tất cả rác thải thu thập được, hãy gọi nó trong một vòng lặp, cho đến khi giá trị, được trả về bởi lua_gc(LUA_GCCOUNT)
, sẽ giữ nguyên.
Lưu ý rằng (AFAIK) bạn không thể giải phóng dung lượng, được phân bổ cho ngăn xếp chính nó — trừ khi, tất nhiên, bạn gọi lua_close()
.
Tôi nghĩ bạn có nghĩa là: lua_settop (L, 0). – Watusimoto
Đã sửa lỗi, cảm ơn! –
Nếu bạn đã đặt ví dụ: 5 yếu tố trên stack bạn không còn cần, bạn có thể loại bỏ chúng với lua_pop:
lua_pop(l, 5) -- removes the 5 topmost elements from the stack
Nếu không, bạn có thể muốn sử dụng lua_settop hoặc lua_remove như đã đề xuất.
Vì Lua tự động được thu thập rác, bộ nhớ thực sẽ bị mất một thời gian để giải phóng, vì vậy bạn cần gọi cho bộ thu gom rác một cách rõ ràng nếu bạn muốn xóa ngay lập tức.
Trong một số trường hợp, bạn không phải làm như vậy. Ví dụ, trong một hàm, bạn có thể đẩy 5 giá trị, sau đó trả về 3, để nói rằng bạn đang trả về 3 giá trị. Thêm 2 giá trị sẽ được giải phóng tự động, vì kích thước ngăn xếp được điều chỉnh theo những gì bạn nói. (Điều này tránh lỗi khi bạn nói rằng bạn đang trả về một số giá trị khác so với thực tế được đẩy.)
nếu bạn đang sử dụng một bảng hoặc mảng như lưu trữ biến bạn có thể thiết lập các khóa để nil bằng cách làm
a[variable key]=nil
tôi đọc rằng nếu bạn gọi một chìa khóa mà không tồn tại trong bảng/mảng nó sẽ trả về nil, nil là trạng thái không có dữ liệu, biến hoặc trạng thái, tôi luôn giả định rằng, theo cách xóa hoặc xóa dữ liệu trong khóa
lua_settop(L, 0);
sẽ hoạt động. Gọi lua_gc() sau đó. Điều này sẽ không giải phóng tất cả không gian, toàn bộ ngăn xếp sẽ bị xóa khi bạn đóng trạng thái lua.
- 1. Quản lý bộ nhớ Vala
- 2. NSTimer bộ nhớ quản lý
- 3. Quản lý bộ nhớ QT4
- 4. quản lý bộ nhớ java
- 5. Quản lý bộ nhớ CFSTR
- 6. Quản lý bộ nhớ dll
- 7. Quản lý bộ nhớ WebView
- 8. Quản lý bộ nhớ và thực hiệnSelectorInBackground:
- 9. Quản lý bộ nhớ trong Forth
- 10. C++: về quản lý bộ nhớ
- 11. Java: Cách ArrayList quản lý bộ nhớ
- 12. iOS quản lý bộ nhớ cơ bản
- 13. Quản lý bộ nhớ mảng Fortran
- 14. Android - Quản lý bitmap và bộ nhớ?
- 15. Quản lý bộ nhớ trong perl
- 16. Hợp nhất lớn/Quản lý bộ nhớ
- 17. Quản lý bộ nhớ cache của MapView
- 18. Quản lý bộ nhớ không có nhánh?
- 19. Quản lý bộ nhớ ba js
- 20. Hệ thống quản lý gói của Lua?
- 21. Triết lý quản lý bộ nhớ trong C++ là gì?
- 22. Quản lý bộ nhớ tùy chỉnh với bộ nhớ cục bộ tùy chỉnh
- 23. Đơn vị MMU (Bộ quản lý bộ nhớ) trong bộ xử lý bảo vệ các phân đoạn bộ nhớ
- 24. Quản lý bộ nhớ của thành phần không được quản lý theo CLR
- 25. Phân bổ bộ nhớ không được quản lý miễn phí từ mã được quản lý
- 26. Ptr_vector quản lý bộ nhớ như thế nào?
- 27. Viết trình quản lý bộ nhớ của riêng bạn
- 28. Bộ nhớ mã được quản lý như thế nào?
- 29. Quản lý bộ nhớ, Heap Corruption và C++
- 30. Quản lý bộ nhớ được chia sẻ hoàn toàn .NET.
Tại sao bạn nên downvote? Điều này chắc chắn là lập trình liên quan và tôi không có bất kỳ vấn đề với ngôn ngữ được sử dụng hoặc bất cứ điều gì. –
* ngôn ngữ như tiếng Anh –
Bạn đang cố gắng đạt được điều gì? – lhf