На самом деле с malloc всё не совсем так, и mmap тут не причём - он для другого. Хотя, возможно встречаются какие то реализации библиотек. На самом деле он довольно просто устроен. Но есть разные реализации. Прежде всего, malloc работает с двухмерным списком, и возвращает адрес, перед которым лежит структура (node). Ещё, если речь идёт про Линукс, он вызывает sbrk, который, в свою очередь, делает системный вызов brk, который изменяет верхнюю границу памяти процесса. Выделение же физических страниц памяти происходит уже непосредственно при обращении к ним, из обработчика исключений. И malloc не всегда делает системные вызовы. В большинстве реализаций стандартной библиотеки блоки малого размера выделяются в отдельном месте, где память уже заранее выделена.
Если сделать шаблонный аргумент шаблона то нельзя будет передать не шаблонный аллокатор. Ну и слушатели могли понять это как "в С++ нельзя шаблонный аргумент шаблона", но это не так. P.S. вызов деструктора фундаментального типа в шаблонном коде это не ошибка
15:58 зачем reinterpret_cast и new char[...], когда можно static_cast и malloc? Так мы и время не будем терять на инициализацию чаров. Случай номер 2 отсюда: en.cppreference.com/w/cpp/language/default_initialization
В Вашем случае это ub. Дело в том, что можно записывать в неинициализированную память, а читать нельзя. В примере из видео сначала происходит инициализация чаров, а потом вызывается конструктор типа контейнера по этим чарам. Получается, что первая инициализация не имела смысла.
На самом деле с malloc всё не совсем так, и mmap тут не причём - он для другого. Хотя, возможно встречаются какие то реализации библиотек. На самом деле он довольно просто устроен. Но есть разные реализации. Прежде всего, malloc работает с двухмерным списком, и возвращает адрес, перед которым лежит структура (node). Ещё, если речь идёт про Линукс, он вызывает sbrk, который, в свою очередь, делает системный вызов brk, который изменяет верхнюю границу памяти процесса. Выделение же физических страниц памяти происходит уже непосредственно при обращении к ним, из обработчика исключений. И malloc не всегда делает системные вызовы. В большинстве реализаций стандартной библиотеки блоки малого размера выделяются в отдельном месте, где память уже заранее выделена.
Если сделать шаблонный аргумент шаблона то нельзя будет передать не шаблонный аллокатор. Ну и слушатели могли понять это как "в С++ нельзя шаблонный аргумент шаблона", но это не так.
P.S. вызов деструктора фундаментального типа в шаблонном коде это не ошибка
Как называется курс? Разве на первом курсе фпми уже не читают лекции по плюсам?
Так это и есть лекции первого курса
@@sergeybarsukov6198 а что за курс тогда про плюсы который ведет мещерин на своем ютуб канале?
@@walcermelodia на канале Ильи Мещерина выкладывается курс основного потока, здесь - курс продвинутого
Привет.Выложите задания, пожалуйста
15:58 зачем reinterpret_cast и new char[...], когда можно static_cast и malloc? Так мы и время не будем терять на инициализацию чаров.
Случай номер 2 отсюда: en.cppreference.com/w/cpp/language/default_initialization
Разве встроенные типы(int, char…) как-то инициализируются?
int main() {
int i;
return i; // UB
}
В Вашем случае это ub. Дело в том, что можно записывать в неинициализированную память, а читать нельзя. В примере из видео сначала происходит инициализация чаров, а потом вызывается конструктор типа контейнера по этим чарам. Получается, что первая инициализация не имела смысла.