Как управлять памятью в C#: StructLayout

Привет, Хабр!

Сегодня рассмотрим тему, которая обычно ассоциируется с C или Rust, но никак не с C#. А именно — ручное управление памятью, байтовые смещения, бинарная сериализация и прочая низкоуровневые вещи. Зачем? Допустим, в одном из проектов потребовалось прочитать старый бинарный лог от С-подобной прошивки. Формат документации был: offset 0 — 1 byte: Type; offset 1 — 2 bytes: ID; offset 3 — 4 bytes: Timestamp; и т.д.

Разбирать всё это вручную с BinaryReader? Нет, спасибо. Можно воспользоваться StructLayout, FieldOffset, MemoryMappedFile, Unsafe.As<T>() и Span<byte>.

Читать далее

📌 Похожие новости

Нет изображения

Stack Inspector: мониторинг стека в iOS и macOS

Сколько реально занимает стек в вашем iOS/macOS-приложении? Давайте разберёмся, как в рантайме:...

28.08.2025 08:47
Нет изображения

Move-only типы и ключевое слово move в Swift

Привет, Хабр! Сегодня рассмотрим интересную вещь из из стека Swift 6 — move-only типы, ключевое...

05.08.2025 06:39
Нет изображения

[Перевод] Линус Торвальдс: Критика C++ — Комплексный анализ

Линус Торвальдс, создатель (и великодушный диктатор) Linux, всегда с особой критикой относился к...

21.04.2025 12:49
Нет изображения

16 байт вместо 32: управляем layout'ом в C++

Привет, Хабр! Если вы пишете код для систем с ограниченными ресурсами, или просто хотите держать в...

14.04.2025 07:34