Những hạn chế của mã không an toàn, trong C# là gì? Ví dụ, tôi có thể làm hầu như tùy ý các phôi con trỏ và số học như thể tôi đang sử dụng C hoặc C++?Mã không an toàn trong C#
Trả lời
Có. All bets are off khi không an toàn đang được phát. Đây là ý tưởng đằng sau "không an toàn" - rằng "an toàn" của các loại có thể xác minh được loại bỏ và bạn có thể truyền từ một con trỏ của một loại sang con trỏ thuộc loại khác mà không có thời gian chạy giữ bạn từ shooting yourself in the foot, nếu bạn mong muốn - giống như C hoặc C++.
Dưới đây là một ví dụ về sử dụng các loại con trỏ khác nhau trong C#:
fixed (Byte* dstBytes = ¤tImage[0])
{
var dstBuffer = (Int64*)dstBytes;
const int blockCount = ImageSizeInBytes/sizeof(Int64);
for (var j = 0; j < blockCount; j++)
{
dstBuffer[j] = srcBuffer[j];
}
}
Lưu ý kiểu của mảng là Byte[]
, nhưng sau khi tôi nhận được một Byte*
tôi có thể bỏ nó vào Int64*
và làm việc với 8 byte tại một thời gian.
Có, bạn có thể tạo điểm con trỏ ở bất cứ đâu bạn muốn.
Tuy nhiên, khi chương trình của bạn đang chạy trong không gian địa chỉ ảo, bạn chỉ có thể truy cập bộ nhớ thực sự tồn tại trong không gian đó, tức là bạn không thể truy cập bất kỳ quy trình nào khác và bạn không thể truy cập bộ nhớ không có. t được phân bổ.
Bạn có thể tham khảo trang sau để biết thêm thông tin:
http://msdn.microsoft.com/en-us/library/y31yhkeb.aspx
Mã không an toàn cung cấp khả năng để khai báo con trỏ cho hầu như bất kỳ biến nguyên thủy (loại cơ bản); bạn được phép truyền giữa các loại con trỏ. Số học con trỏ được dựa trên kích thước lưu trữ của kiểu con trỏ, do đó việc áp dụng sau tăng hoặc sau giảm cho con trỏ sẽ tăng địa chỉ bằng sizeof (loại).
Có, đó là tất cả. Đây là Unsafe Code Tutorial từ MSDN.
Để tất cả những người nói cách sử dụng này là một ý tưởng khủng khiếp: có, nhưng nó có một lý do. Gần đây, tôi đã phải sử dụng tính năng này (lần đầu tiên), nhận dữ liệu webcam qua API của bên thứ ba trả lại Byte *
.
- 1. Mã an toàn và không an toàn
- 2. Mã C sau có an toàn không?
- 3. Vùng mã không an toàn trong TypeScript
- 4. Tôi có nên trộn lẫn mã an toàn với mã không an toàn của mình không?
- 5. Chứng minh mã sau không an toàn
- 6. Viết mã Cocoa an toàn
- 7. Xóa C# Con trỏ Không an toàn
- 8. C socket API có an toàn không?
- 9. Bạn có nên sử dụng con trỏ (mã không an toàn) trong C# không?
- 10. C# enums có an toàn không?
- 11. NHibernate SchemaUpdate có an toàn trong mã sản xuất không?
- 12. Cách biên dịch mã không an toàn trong VS2012
- 13. An toàn loại an toàn()
- 14. C++ an toàn ngoại lệ
- 15. Mảng an toàn không có khóa an toàn
- 16. Đúc an toàn trong mục tiêu C
- 17. an toàn Chủ đề trong C mảng #
- 18. Xóa an toàn tệp trong C# .NET
- 19. tại sao "f = f ++" không an toàn trong c?
- 20. C++ so với C# loại an toàn
- 21. Trộn các kênh an toàn & không an toàn
- 22. Tại sao mã này không phải là chuỗi an toàn?
- 23. Mã python an toàn nhất chạy
- 24. IFRAME an toàn được lồng trên trang không an toàn
- 25. Mã không an toàn này hoạt động như thế nào?
- 26. Loại mã của tôi có an toàn không?
- 27. Cơ chế an toàn không an toàn Arduino
- 28. Chuỗi an toàn của Netty Channel.write có an toàn không?
- 29. Macro đúc an toàn mục tiêu-C
- 30. Ngăn xếp C++ an toàn Chủ đề
+1 Đối với liên kết, (và câu trả lời hay). – Sam