Как слить всё в одну секцию?
Как запустить скрипт на C из perl?
if
? Какая у них цель на самом деле? #pragma region
и мало кто приветствует его наличие в коде. Мало кто знает про вложенные блоки и мало кто приветствует их в коде. Мало кто вообще любит работать над стилем изложения кода и мало кто приветствует эту работу. Тот же UTF-16, к примеру. Он по определению ну явно не может всего 2 байта в памяти держать)
Просто такие нюансы должны быть очевидны и не вижу смысла в который раз расписывать все эти детали...
, в которую передаётся указатель типа void*,
может иметь право на жизнь в рамках твоего проекта. min
и max
все и портила.Выводит ошибку
arr
присутствует слово struct
? Зачем в объявлении arr
присутствуют квадратные скобки? std::pair
тебе пока ведь и не надо подробно понимать :)std::tie
принимает пару и достает ее значения в указанные переменные, т.е. буквально распаковывает пару. std::tie
лучше пока тоже особо не изучать т.к. там на самом деле в основе лежит очень глубокий раздел метапрограммирования.GetMinMax
просто возвращает два значения - индекс минимального и индекс максимального значений в переданном массиве stream
.Т.е. после того, как мы просмотрели все элементы массива через цикл for, мы ставим условие...
for( size_t index = 1; index < stream_length; ++index )
) стоят фигурные скобки, то в них записано тело цикла - набор операций для каждой итерации цикла. В теле нашего цикла мы на каждой его итерации можем работать с уникальным индексом элемента массива. fwrite
реализована на языке C и является частью file i/o API. std::basic_string
является частью Strings Library, а std::vector
- частью Container Library в Standard Template Library, реализованной на языке C++.fwrite(&name, sizeof(name), 1, f);
nazv
или a
не хранится, там хранятся только указатели на выделенную память + довольно много сервисных полей. Даже учитывая SSO нельзя говорить что данные самой строки размещаются внутри объекта std::string
, т.к. в общем смысле это не так.fwrite(&name.nazv, sizeof(string), 1,f);
fwrite(&name.semestr, sizeof(int), 1,f);
fwrite(&name.a, sizeof(name.a), 1,f);
fwrite
, откуда ей на самом деле стоит брать память для формирования нужного тебе формата файла. Эта функция ничего не знает о строках и типах, о размещении в памяти и структуре того или иного объекта. Она принимает просто кусок памяти и пишет его в файл по текущей позиции в файле. Все.std::string
и std::vector
в интерфейсе есть функция data
(для строки, для вектора) для получения указателя на подконтрольную память. В случае строки ты эту память можешь писать сразу в файл. В случае вектора от int
- тоже, т.к. с фундаментальными типами все довольно просто. std::string
и std::vector<int>
. Расскажи про эти типы, как они работают, какая у них методология управления памятью. Частью какой библиотеки являются эти типы? К какой подсистеме этой библиотеки данные типы относятся?fwrite
?fwrite
, и на каком именно языке реализованы шаблоны std::basic_string
и std::vector
?
В секции .text лежит код. Код отображается в память процесса для исполнения. Над содержимым секции перед исполнением проводится ряд манипуляций.
В секции .idata лежит таблица импорта символов. В секции .edata - экспорта символов. А в секции .rdata - память неизменных данных с разрешением доступа только на чтение.
Посмотри что из себя представляет секция .idata. Лично я не представляю, помимо ограничения прав доступа, как загрузчик PE будет работать со слитыми вместе data и text секциями. Так же я не представляю, где в процессе слияния секций может быть экономия места.