𝐑𝐨𝐨𝐭𝐓𝐨𝐨𝐥 𝐁𝐥𝐨𝐠
194 subscribers
570 photos
48 videos
5 files
60 links
ニャン
Download Telegram
Угу-угу, никого ничто не смущает?
😁5🤔2
Forwarded from Nothing To Show
Media is too big
VIEW IN TELEGRAM
Вспомнил капкат и решил смонтажить что-то (спасибо RootTool за перевод)
👏3🔥1💋1
This media is not supported in your browser
VIEW IN TELEGRAM
❤️ - Visual Studio Code
🔥 - Rider IDE
👀 - notepad.exe
🔥9❤3👀3
Скоро уже 20 лет....
❤6😢1🫡1
Доброе утро
❤5🥰2😁1
Выравнивание данных (Data Alignment) в C++
#новичкам

Не сказать что тема прям супер-важная, но дает глубокое понимание работы с памятью в С++.

Начнем с основы: Стек - Область оперативной памяти, в которой хранятся временные переменные во время работы вашей программы. Процессор подгружает эти переменные из стека в свой кеш и работает с ними (производит какие-либо операции и тд.)
P.S. Я знаю, обьяснено крайне поверхностно, не бейте

Но стек подгружается в кеш блоками, то есть, за 1 такт считывает определенную область с стека в кеш и работает с ней. Обычно оно кратно 4/8/16/32/64 (Зависит от архитектуры процессора и настроек компилятора) и тема "Выравнивание данных" как раз про это

В теории: Для правильной подгрузки компиляторы обычно выравнивают данные структур под четкую размерность (MSVC: 8 байт для x64 и 4 байт для x32) чтобы не было долгой подгрузки частями (что замедляет работу и может привести к исключениям-). И именно тут все зависит от программиста, ведь правильное размещение полей структуры напрямую влияет на производительность и корректность программы (оптимизация ура)

На практике: Рассмотрим структуры FGoodStructure и FBadStructure. Обе имеют одинаковое количество информации, по идее и размер (8+4+2+1 = 15 байт) должен быть одинаковым, так? Не совсем: Узнав размер структуры через функцию sizeof() выяснится неприятная новость - FBadStructure имеет размер 24 байт, в то время как FGoodStructure только 16

Почему так? Ответ в выравнивании - процессору удобно обращаться к определенному типу данных по адресу, кратному 4 (или 8). И в данном случае в FBadStructure имеет плохое расположение полей - int SomeInt (4 байт) попросту не уместить рядом с char SomeChar (1 байт) - компилятору НУЖНО вставить 3 пустых байта между ними для выравнивания. И да, это фича, с вытекающими ввиде раздутого размера структуры

А для лучшего понимания давайте лучше визуализируем (и нет, это не придумано мною, буквально программа сама выдает этот результат). Как видите между SomeInt и SomeChar стоит 3 байта для выравнивания, а после SomeNumber аж 6 пустых байт. Безумие? Ага. Но зато какое. При этом у FGoodStructure реально все хорошо. Всего-лишь 1 пустой байт для выравнивания размера к кратному 8 (в данном случае размер 15 байт ближе к 16 вместо 24 :D)

Смысл басни такова: Прописывайте свои поля в структуре так, чтобы размеры их типов шли от большего к меньшему (как в примере FGoodStructure). Это легко, это просто, это эффективно. Программу не сломает, а процессор спасибо скажет

Aligment Your Structures. Think Cold.
❤4🔥2👍1🆒1
Была значит у меня на часах Акира....

не спрашивайте что я делал с ней 🤫
😁3🤯1
XP, 7-ка, к вам новый друг пришел...
🙏5😭3🕊1
Есть 2 стула...
🔥3😁3❤2🍾1
𝐑𝐨𝐨𝐭𝐓𝐨𝐨𝐥 𝐁𝐥𝐨𝐠
Неожиданный дроп, месяц работы и встречайте - A Cold Love Story Remaster (V1.1) Да-да, хоть кто-то спустя 10 лет взялся за игру Лиама Викерса (Серьезно, он выпустил ее в 2015-м) Чем можем порадовать? - Подчистка от лишних файлов - залог оптимизации (Вес…
Еще больше и неожиданнее дроп - A Cold Love Story Remaster V1.2

В данном обновлении мы добавили сразу 3 оригинальные истории связанные с этой новеллой:
- ACLS Reload (ХИЛ Перезапуск)
- ACLS Retold [1/2] (Пересказ ХИЛ [1/2])
- ACLS Retold [2/2] (Пересказ ХИЛ [2/2])

Все они имеют оригинальный-английский и русский-переведенный вариант (Переводчик: Ponder_Static)

P.S. Пересказанные истории являются тем же рассказом, но от лица Сары - лично мне понравилось читать их. Кого заинтересовал - бегом скачивать!

Ссылочка: тык
(Windows/Linux/Android)
❤‍🔥4🔥1
Искал гайд про работу с Enum, а нашел большую статью про внутреннюю работу всей рефлексии в Unreal Engine

Рефлексия - способность программы обновлять данные о классе, не выходя из нее. В данном случае: Программист пишет код, создает переменную, компилирует, а UE в свою очередь обновляет интерфейс редактора, добавляя туда эту переменную, поля, кнопочки к ней и тд.

Удобно же ведь!
(ага, если бы не тупила вообще супер :D)

Ах да, та самая статья на Хабре: https://habr.com/ru/articles/690662
🔥3❤‍🔥1🤩1
4. друг PHP
5. преподаёт в школе
6.
❤‍🔥4🤩1
А на чей стороне ты?
❤4❤‍🔥1🤩1
Искусство Построения Архитектуры Проекта

Пролог

Как однажды говорил Линус Торвальдс: «Плохие программисты беспокоятся о коде. Хорошие программисты беспокоятся о структурах данных и отношениях между ними»

И с ним я солидарен. Сеньоров тем и отличаются, что они не просто пишут для "сейчас", а продумывают архитектуру "на перед", на месяцы и годы, чтобы любое обновление не заставляло ломать весь код и наращивать костыли.

В данной серии постов я расскажу про свой опыт и советы по построения хорошей архитектуры, ведь это является фундаментом и скелетом всего вашего проекта.

Сразу оговорюсь: Я не вешаю себе корону и не считаю себя 100% сеньором как таковым. Хоть и знаю про построение архитектур, имею опыт, прописываю весь бекенд и документации к нему, но опять же: В своей команде Portal: Solver - я один-единственный программист. Так что формально команда есть, но из моей области - только я. И конечно в одиночку кричать что я сеньор - глупо...

Get Ready. Think Cold.
❤3🔥1💯1
This media is not supported in your browser
VIEW IN TELEGRAM
Искусство Построения Архитектуры Проекта

Глава 0: Реализация функций

Перед прочтением стоит упомянуть что такое "Реализованные функции" ?
Когда вы пишите:
int Foo(int a, int b) {
return a + b;
}

^ Это является реализованной функцией, ведь вы объявили ее: "int Add(int a, int b)" и сразу реализовали тело функции: "return a + b;" - так компилятор сразу может объявить функцию Add и скомпилировать ее "внутрянку" в машинный код

А нереализованная функция выглядит примерно так:
int Foo(int a, int b);

^ Вы знаете что внутри этой функции? Вот и компилятор не знает что там! А поэтому не может скомпилировать ее в машинный код (ведь он не знает что внутри ¯\_(ツ)_/¯) - это и есть нереализованная функция

Оговорка: В стандарте С++ корректнее называть "объявление функции", но в данной серии постов мы будем использовать глагол "объявить" как "создание переменной/функции. Просто очерк в коде, что она есть", а под словом "реализация" будем иметь ввиду "прописывание тела функции"

Implement Your Functions. Think Cold.
❤3❤‍🔥1💯1