Nếu bạn sử dụng idlasm.exe
để nghiên cứu il, tại dòng mà bạn tạo ra một thể hiện của các Empty
struct, bạn sẽ thấy:
.maxstack 1
.locals init ([0] valuetype Draft.Empty e)
Và định nghĩa của Empty
struct là:
.class private sequential ansi sealed beforefieldinit Draft.Empty
extends [mscorlib]System.ValueType
{
.pack 0
.size 1
} // end of class Draft.Empty
Như bạn thấy nó phân bổ 1 byte tại thời gian tạo và trong định nghĩa kích thước của loại này là 1.
Vì vậy, có; nó phân bổ 1 byte trên stack.
Lưu ý: định nghĩa của Empty
được trích xuất từ cụm được biên dịch trong chế độ phát hành.
Nguồn
2013-06-06 15:48:39
Tôi hy vọng trình biên dịch sẽ tối ưu hóa điều này. Đặt một điểm break trên dòng đó trong Foo và xem hit của nó? – Sayse
Nó sẽ được tối ưu hóa nếu bạn tạo biến kiểu 'int'. Có lẽ một ví dụ tốt hơn sẽ liên quan đến việc chuyển cấu trúc đến một hàm. –