Как написать функцию выделения памяти?18.08.2020, 01:51. Показов 7901. Ответов 76
Метки нет (Все метки)
Насколько сложно это сделать? Покажите примитивный механизм поиска памяти, как вариант мне даже интересно посмотреть как работают известные функции(
new maloc caloc), я читал что по принципу сборщика мусора но механизмов реализации не видел.
0
|
|
| 18.08.2020, 01:51 | |
|
Ответы с готовыми решениями:
76
Создать функцию для выделения памяти под двумерный массив |
|
38 / 13 / 3
Регистрация: 30.09.2020
Сообщений: 65
|
|
| 03.10.2020, 05:25 | |
|
Для начала почитай как работает стэк в ассемблере. Если тебе сложно понять ассемблер, то используй готовые менеджеры памяти, которые тебя сделают Аки Царём быстрого прогресса. Потому что хернёй не будешь страдать. Данные сами выделяются, ты указываешь какое выравнивание хочешь, и прочее.
А оно тебе даёт. Прям как Наташка с первого подъезда. Добавлено через 23 минуты В общем, что бы понять как взаимодействовать с оперативной памятью. Надо почитать как взаимодействовать с оперативной памятью на ассемблере. И заодно там уже будут понятия как вообще данная память выделяется. Как процессор взаимодействует с оперативной памятью, и прочее. А вот вся эта поверхностная лабуда с примитивными примерами - херня чистой воды
0
|
|
|
Модератор
|
|||||||||||||||||||||||||||||||||
| 03.10.2020, 07:08 | |||||||||||||||||||||||||||||||||
|
BSS - это директива или псевдоинструкция одного из древних ассемблеров. По смыслу близкая к чему-то вроде
Эти разделы (a.k.a. программные секции), которые компилятор создаёт в объетных модулях, поступающих на вход компоновщика?
https://en.cppreference.com/w/cpp/language/new https://ru.cppreference.com/w/cpp/language/new ![]() https://ru.coursera.org/lectur... -new-jSggV
0
|
|||||||||||||||||||||||||||||||||
|
Модератор
|
||
| 03.10.2020, 07:21 | ||
|
Не по теме:
Добавлено через 11 минут В C++ нет никаких "разделов". Но они могут быть в системе, в которой разрабатывается, собирается или выполняется разрабатываемая программа.
0
|
||
|
38 / 13 / 3
Регистрация: 30.09.2020
Сообщений: 65
|
|||||||||||||||||||||||||||||||||||||
| 03.10.2020, 18:57 | |||||||||||||||||||||||||||||||||||||
|
Я это написал к тому что, что бы понять как память вообще выделяется на низкоуровневых языках. Ладно, напросились. Будем с вами как с маленькими. Обычно, память выделяет система. Так как система закрытая у нас - Windows то мы на неё сразу забьём. Какая у нас система не закрытая ? Ага! Linux вот вам ваша sbrk Она в свою очередь использует Ассемблерные вставки Кликните здесь для просмотра всего текста
То есть по простому, исходя из __i386__ платформы, мы можем понять что выделение идёт как
Вот и сказочки конец. Добавлено через 6 минут Я сразу скинул ссылку на основную функцию. Но что бы не было ещё вопросов
Ну а теперь давайте про malloc. Раз уж дело пошло. https://github.com/torvalds/li... s/mm.h#L34 Кликните здесь для просмотра всего текста
О многом не говорит. Но если мы взглянем на ассемблер данной функции, то тут всё очевидно
Ну а теперь давайте про malloc. Раз уж дело пошло. https://github.com/torvalds/li... s/mm.h#L34 Кликните здесь для просмотра всего текста
О многом не говорит. Но если мы взглянем на ассемблер данной функции, то тут всё очевидно
0
|
|||||||||||||||||||||||||||||||||||||
|
Модератор
|
||
| 03.10.2020, 19:02 | ||
![]() Но в Windows есть куча готовых функций для создания, удаления куч, и, кончено, выделения и освобождения участков памяти в этих кучах. Но всё это - не часть стандарта С++.
0
|
||
|
38 / 13 / 3
Регистрация: 30.09.2020
Сообщений: 65
|
|||
| 03.10.2020, 19:05 | |||
|
https://docs.microsoft.com/ru-... ew=vs-2019 Добавлено через 1 минуту
0
|
|||
|
Модератор
|
|||
| 03.10.2020, 19:19 | |||
Добавлено через 4 минуты
0
|
|||
|
38 / 13 / 3
Регистрация: 30.09.2020
Сообщений: 65
|
||
| 03.10.2020, 19:55 | ||
|
А если нужно много памяти, то легче сделать многопроцессорное приложение. 2 приложение по 4гб жрать могут, и работать могут распределяя потоки компьютера на ура. А если ещё и не 2 а 4 их. Прям сказка. Скорость может доходить на x2 выше по сравнению с 64x битным.
1
|
||
|
Модератор
|
|
| 03.10.2020, 22:13 | |
|
64-разрядные системы стали основными для настольных машин.
Более просторное адресное пространство делает возможным другие стратегии управления. Конечно, хорошо, что 32-разрядные и комбинированные процессы тоже могут работать в 64-разрядной системе.
0
|
|
| 03.10.2020, 23:26 [ТС] | ||||
Data...(полное название не помню) и BSS где ассемблер просит память. Потому что такого не может быть чтобы где попало оно запрашивало память. И мне не понятно что у вас сначала один пример потом другой пример потом третий. Должен быть какой-то общий принцип.Добавлено через 4 минуты Добавлено через 3 минуты register?
0
|
||||
|
Модератор
|
|
| 03.10.2020, 23:57 | |
|
Это не c++, и даже не Си, а gcc.
Используется множество нестандартных и несовместимых с языком расширений. В С++ ключевое слово register устарело https://en.cppreference.com/w/... e_duration
0
|
|
| 04.10.2020, 00:03 [ТС] | |||||||
|
что происходит в этом блоке?
0
|
|||||||
|
Модератор
|
||||||||||||
| 04.10.2020, 06:03 | ||||||||||||
|
Выполняется системный вызов с одним параметром ( вызов одной из функций супервизора ( "ядра" ) linux ) в соответствии с принятым в linux для x86_64 ABI
https://www.cyberforum.ru/c-linux/ Добавлено через 16 минут
0
|
||||||||||||
| 04.10.2020, 06:18 [ТС] | ||
mov ложить в регистр значение любого типа, что есть и плюс и минус, типизация помогает проверять ошибки а безтипизация позволяет лучше управлять данными. Но опять же меня интересует конкретно в каких разделах просится память и каким можно получить доступ из с++ на 98ом стандарте?
0
|
||
|
Модератор
|
|
| 04.10.2020, 07:27 | |
|
Разделов нет ни в 98-м стандарте , ни в 20-м
В с++ есть storage class, const/volatile, типы данных с выравниванием и прочими атрибутами https://en.cppreference.com/w/... e_duration https://en.cppreference.com/w/cpp/language/scope В зависимости от того, где определён объект, как он иницализирован ( или не инициализирован ), от его storage class etc., принятых в системе соглашений, настроек системы программирования на с++, компилятор может разместить в объектном файле указания для компоновщиков и загрузчиков, какие программные секции, сегменты, разделы создать, какого размера, с какими атрибутами и чем их заполнить до начала выполнения программы. Если, конечно, разделы (секции, сегменты etc.) предусмотрены в конкретной системе, на которой должна выполняться программа. О конкретных системах лучше задавать вопросы в конкретных разделах: https://www.cyberforum.ru/c-linux/ https://www.cyberforum.ru/win-api/ https://www.cyberforum.ru/cpp-builder/ и т.д.
0
|
|
| 04.10.2020, 20:45 [ТС] | ||
new и другие и я хочу построить свою функцию которая будет обращаться в такие разделы и просить память у меня будет свой описатель и свои правила. И ребята по возможности не вылаживайте ассемблерные коды, если вылаживаете то комментируйте потому что на Ассемблере я не пишу физически не могу с ним работать.
0
|
||
|
Модератор
|
||||||
| 05.10.2020, 11:01 | ||||||
|
В любом случае память, одновременно доступная программе ограничена имеющимся адресным пространством ( 16-разрядным, 32-разрядным, 48-разрядным и т.д.).
Можно для временного или постоянного хранения страниц памяти использовать файлы, или, как Ligren, создавать дочерние процессы, выделять память в их адресном пространстве, и, если возникнет такая необходимость, системозависимыми функциями для взаимодействия процессов получать доступ к некоторым областям этой памяти. Но и в этом случае действуют те же ограничения. 6-гигабайтный массив данных целиком в 32-разрядное адресное не поместится. Часть массива всегда будет "невидимой" для выполняющего программу процессора. Если не важно размещение объектов, то и в разделах их размещать необязательно ? Размеры разделов и их расположение в адресном пространстве определяются при компоновке и загрузке исполняемого (загрузочного) модуля. Если нужно хранить что-то в разделе для неинициализированных объектов, можно зарезервировать область большого размера, определив какой-нибудь массив и хранить там, например координаты четырёхмерных объектов, при этом своими средствами следить за занятым и своободным пространством в этом массиве.
В C++ у нас есть два стандартных варианта оператора new. В одном адрес нового объекта задаёт программа, в другом (основном) - адрес размещения новому объекту назначает стандартная библиотека. Программа на С++ может определять свои операторы new с другими параметрами, переопределять глобальный оператор new. Свой оператор new можно определить для отдельных структур и классов. По наследству от стандартной библитеки Си досталась std::malloc().В "старых" (но не самых древних) стандартах есть std::allocatorhttps://en.cppreference.com/w/cpp/memory/allocator
0
|
||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 05.10.2020, 16:36 | ||
|
1
|
||
| 05.10.2020, 16:36 | |
|
Написать функцию выделения первого слова из строки Написать инструкцию выделения памяти для одного экземпляра заданного класса (динамическая память)
Написать код для динамического выделения памяти под массив из 10000 целых чисел Написать функцию выделения произвольной строки двумерного массива в одномерный Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|