Tôi không tìm cách cải thiện hiệu suất hoặc sử dụng bộ nhớ, câu hỏi này hoàn toàn được tạo ra từ sự tò mò.Các loại dữ liệu nhỏ được đóng gói như thế nào trong C#
Main Câu hỏi Với lớp sau các biên dịch C# (Mono + .NET) sẽ gói hai short
biến thành 4 byte hoặc họ sẽ tiêu thụ 8 byte (với liên kết)?
public class SomeClass {
short a;
short b;
}
Câu hỏi thứ Nếu câu trả lời cho câu hỏi trên không phải là 4 byte, sẽ đề nghị sau đây thay thế bất kỳ lợi thế (nơi SomeClass
được sử dụng với số lượng rất lớn):
// Warning, my bit math might not be entirely accurate!
public class SomeClass {
private int _ab;
public short a {
get { return _ab & 0x00ff; }
set { _ab |= value & 0x00ff;
}
public short b {
get { return _ab >> 8; }
set { _ab |= value << 8; }
}
}
Trình biên dịch C# sẽ không liên quan gì đến nó - nó sẽ là thời gian chạy. –
Khi bạn nói "được sử dụng với số lượng rất lớn" - chúng ta đang nói về bao nhiêu, và chúng được sử dụng như thế nào? Bạn đang tạo một mảng/danh sách/etc trong số này? –
@ReedCopsey Vâng, lý thuyết của ngữ cảnh này sẽ là một danh sách lớn với quyền truy cập thường xuyên vào các mục cụ thể theo chỉ mục. –