Tôi muốn undesrtand và những gì được lưu trữ trong stack/heap trong swift. Tất cả mọi thứ mà bạn in và địa chỉ bộ nhớ sẽ không xuất hiện, các giá trị được lưu trữ trong ngăn xếp, và những gì được in ra dưới dạng giá trị, những giá trị đó nằm trên heap, về cơ bản theo giá trị và kiểu tham chiếu. Tôi hoàn toàn sai? Và tùy chọn, bạn có thể cung cấp một bản trình bày trực quan của stack/heap không?Hiểu biết ngăn xếp/heap nhanh chóng
Trả lời
Các lớp (loại tham chiếu) được cấp phát trong heap, các loại giá trị (như Struct, String, Int, Bool, v.v.) nằm trong ngăn xếp. Xem chủ đề này cho câu trả lời chi tiết hơn: Why Choose Struct Over Class?
như Juul tuyên bố loại tham chiếu được lưu trữ trong Heap và giá trị trong ngăn xếp ...
Ở đây tôi muốn cung cấp cho các giải thích lý do tại sao ...
Stack và một Heap?
Ngăn xếp được sử dụng để phân bổ bộ nhớ tĩnh và Heap cho phân bổ bộ nhớ động, cả hai được lưu trữ trong RAM của máy tính.
Các biến được phân bổ trên ngăn xếp được lưu trực tiếp vào bộ nhớ và quyền truy cập vào bộ nhớ này rất nhanh và phân bổ của nó được xử lý khi chương trình được biên dịch. Khi một hàm hoặc một phương thức gọi một hàm khác mà lần lượt gọi một hàm khác, vv, việc thực hiện tất cả các hàm đó vẫn bị treo cho đến khi hàm cuối cùng trả về giá trị của nó. Ngăn xếp luôn được đặt trước theo thứ tự LIFO, khối được đặt trước gần đây nhất luôn là khối tiếp theo được giải phóng. Điều này làm cho nó thực sự đơn giản để theo dõi các ngăn xếp, giải phóng một khối từ ngăn xếp là gì hơn là điều chỉnh một con trỏ.
biến cấp phát trên heap có bộ nhớ của họ được phân bổ vào thời gian chạy và truy cập vào bộ nhớ này là chậm hơn một chút, nhưng kích thước đống chỉ bị giới hạn bởi kích thước của bộ nhớ ảo. Yếu tố của đống không có sự phụ thuộc với nhau và luôn luôn có thể được truy cập ngẫu nhiên bất cứ lúc nào. Bạn có thể phân bổ một khối bất cứ lúc nào và giải phóng nó bất cứ lúc nào. Điều này làm cho nó phức tạp hơn nhiều để theo dõi những phần nào của vùng được phân bổ hoặc miễn phí tại bất kỳ thời điểm nào.
- 1. Xcode 6 - Ngăn chặn làm mới sân chơi nhanh chóng
- 2. .successor() nhanh chóng là gì?
- 3. Hiểu biết yếu về sự hiểu biết
- 4. nhanh chóng và CMTimeMake
- 5. UIActionSheet với nhanh chóng
- 6. Tạo lớp FBLoginView nhanh chóng
- 7. Đại biểu nhanh chóng đơn giản trong sân chơi nhanh chóng
- 8. NSTimer người dùng nhanh chóng
- 9. lỗi Alert trong nhanh chóng
- 10. Tạo chủ đề nhanh chóng?
- 11. NSURL getResourceValue trong nhanh chóng
- 12. UIButton với báo chí đơn và sự kiện báo chí nhanh chóng nhanh chóng
- 13. AppCode + nhanh chóng - không hoàn thành mã và không có tài liệu nhanh chóng
- 14. Tìm hiểu xem cha mẹ của một nút bấm trong nhanh chóng
- 15. SetProgressBarIndeterminateVisibility thiếu hiểu biết
- 16. fft sự hiểu biết
- 17. Hiểu biết về Dashcode
- 18. yêu cầu lặp lại nhanh chóng loại
- 19. không thực hiện lặp lại nhanh chóng
- 20. Tạo CGRect với cách ngắn - nhanh chóng
- 21. Mô-đun được biên dịch bằng nhanh chóng 4.0 không thể được nhập nhanh chóng 3.0.2
- 22. Nhanh chóng chuyển đổi simpleXMLObject sang STDClass?
- 23. Bất kỳ cách nào để ngăn chặn một khối chữ trong nhanh chóng
- 24. sự hiểu biết vềTrimMemory (cấp int)
- 25. Không thể nhanh chóng lớp: org.apache.naming.java.javaURLContextFactory
- 26. Visual Studio - Phát hành nhanh chóng tìm kiếm nhanh
- 27. hiểu biết cầy mangut [Schema.Types.Mixed]
- 28. Chức năng phái sinh nhanh chóng?
- 29. nhanh chóng 3 lỗi [_SwiftValue nsli_superitem]
- 30. nhanh chóng, alamofire hủy yêu cầu trước
Bản trình bày này giải thích một số cách sử dụng và ngăn xếp của Swift: https://realm.io/news/andy-matuschak-controlling-complexity/. Tóm lại, bạn không thể đưa ra giả định cho dù giá trị hoặc tham chiếu sẽ kết thúc trên heap hay stack, giống như bạn có thể trong C. –
Ngạc nhiên là chưa ai trả lời câu hỏi này, đây là loại ngôn ngữ bí mật chỉ được biết sau bạn trả một cái gì đó để táo ?? – Ahmed