Как написать функцию выделения памяти?18.08.2020, 01:51. Показов 7292. Ответов 76
Метки нет (Все метки)
Насколько сложно это сделать? Покажите примитивный механизм поиска памяти, как вариант мне даже интересно посмотреть как работают известные функции(
new maloc caloc), я читал что по принципу сборщика мусора но механизмов реализации не видел.
0
|
|
| 18.08.2020, 01:51 | |
|
Ответы с готовыми решениями:
76
Создать функцию для выделения памяти под двумерный массив |
|
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
|
|||||||
| 18.08.2020, 01:59 | |||||||
|
2. Вот примерная реализация malloc() и free()
Взято отсюда: malloc implementation
2
|
|||||||
|
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
|
||
| 18.08.2020, 02:35 | ||
|
Добавлено через 4 минуты И эта функция sbrk не обязана вообще существовать, она нигде не задокументирована и не является частью стандарта
0
|
||
| 18.08.2020, 02:41 [ТС] | ||
sbrk обращается к этому блоку и смотрит можно оттуда взять или нет. Возникает 2 вопроса.1. Что стоит за sbrk? Как происходит проверка блока? 2. Я смотрю пишется что sbrk и malloc отдельные автономные функции. sbrk более древняя. Значит этот вариант проста переписка sbrk и возможно malloc работает по другому.
0
|
||
|
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
|
||||
| 18.08.2020, 02:50 | ||||
sbrk не задокументированная и используется ТОЛЬКО в хедерах Сиsbrk там вообще не переопределяли, но то что они работают по другому 100%, то лишь попытка переделать malloс, сама реализация malloc скрыта и закомпилена в какие-нибудь либы
0
|
||||
| 18.08.2020, 21:44 [ТС] | |||
malloс использует sbrk. sbrk выделяет память в байтах, это просто функция выделения, она не создаёт конструкторов деструкторов, не сохраняет значение запрошенное у системы. Ещё есть brk mmap и ещё какае-та функция. Походу все функции (new maloc caloc realoc -основная задача этих функций придать гибкость низкоуровневым функциям) выделения памяти построены на них. Очень странно что документация скрыта по вашему мнению, а может мы просто не знает где прочесть эти инструкции они же должны быть, или бывают такие модули которые скрыты в целях авторского права или из-за нецелесообразности оглосовки того как работает функция. Добавлено через 4 минуты
0
|
|||
|
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
|
|
| 18.08.2020, 21:47 | |
|
0
|
|
| 18.08.2020, 23:41 [ТС] | ||
#include <unistd.h> чтобы использовать sbrk. Хорошо а что скрыто за sbrk? Это последняя функция, которая обращается к блоку или сегменту данных чтобы сичтема выделила память или и за этой функцией что-то стоит?
0
|
||
|
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
|
|
| 18.08.2020, 23:45 | |
|
Ищи sbrk implementation.
0
|
|
| 19.08.2020, 10:36 [ТС] | ||
sbrk конечная функция, которая стоит между тем же Maloc (и другими) и системой. Хотя мне кажется что за ней что-то стоит либо стоит понять как она просит память. Я читал что происход сдвиг указателя в куче, и тем самым память в куче уменьшается и перенаправляется под нужды. Возможно стоит посмотреть Ассемблер и написать функцию которая напрямую будет просить память, возникает вопрос целесообразно ли это.
0
|
||
|
Неэпический
|
|
| 19.08.2020, 10:39 | |
|
0
|
|
|
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
|
||
| 19.08.2020, 11:01 | ||
Попробуй, если считаешь, что подобная практика важна для тебя.
0
|
||
|
Модератор
|
|||||||
| 30.08.2020, 17:51 | |||||||
|
При компоновке, загрузке программы или инициализации кучи создаётся 1 свободный блок, занимающий всё выделенное под кучу пространство.
malloc() находит сводный блок подходящего размера, вырезает в нём область требуемого размера, заполняет заголовок и возвращает адрес програме,Размер свободного блока уменьшается на величину нового занятого блока. Если подходящего свободного блока нет, malloc() возвращает 0. free(), когда получает адрес предварительно выделенного блока, помечает его как свободный,и, если это возможно, объединяет его с соседними свободными блоками в один сплошной блок.
0
|
|||||||
| 31.08.2020, 15:12 [ТС] | ||||||||||||||||||||||
Если вы считаете что схема работает на блоках покажите реализацию этих блоков. Потому что я тоже про блоки наслышан но информации нормальной не нашёл, я так понял что блоки это просто участки на которые поделен объёмы захваченной памяти низкоуровневыми функциями, при чём если
0
|
||||||||||||||||||||||
|
Модератор
|
|||||||
| 31.08.2020, 19:50 | |||||||
mmap().Для чего майкрософтовскому компоновщику параметр /HEAP ?https://docs.microsoft.com/en-... -heap-size И кто выделяет память для подобных массивов?
0
|
|||||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 31.08.2020, 20:00 | ||
|
Добавлено через 4 минуты А так непосредственная реализация этих вызовов является составной частью операционной системы, а за генерацию прослойки между программным кодом и этими вызовами отвечает компилятор (языка С++ и/или С)
0
|
||
|
Модератор
|
|
| 31.08.2020, 20:12 | |
|
Операционной системы может и не быть.
![]() А майкрософтовские реализации стандартной библиотеки могут посмотреть пользователи Microsoft Visual Studio. ![]() Для остальных опубликовано немало иного майкрософтовского добра: https://github.com/microsoft/S... oupper.cpp
0
|
|
| 31.08.2020, 21:32 [ТС] | ||
|
Ну значит понятно что современные функции построены на
sbrk и низкоуровневых функциях да и всё а эти блоки являются частью одного целого участка памяти. Если я правильно понял то sbrk запрашивает память грубо говоря у ядра, потому что на Ассемблере тоже есть такая функция с похожим названием а библиотеки ОС оптимизируют это дело.Можно на этих низкоуровневых функциях построить свои функции более экономно и которые будут работать лучше, но честно говоря целесообразность низкая, в принципе те функции которые представлены разработчиками работают довольно хорошо как мне кажется. Буду жить буду видеть если реализую контрольные задачи то такую функция выделения памяти стоит написать. Добавлено через 4 минуты sbrk и какой функцией опрашивать виртуальную память раз вы об этом упомянули.
0
|
||
|
Модератор
|
||
| 31.08.2020, 23:04 | ||
brk()/sbrk() устарели ещё в 1990-хhttps://pubs.opengroup.org/onl... h/brk.html а потом их и вовсе убрали из стандартов https://pubs.opengroup.org/onl... tions.html https://man7.org/linux/man-pages/man2/brk.2.html
sbrk() (возможно, самодельного)https://sourceware.org/git/?p=... c/malloc.c
0
|
||
| 31.08.2020, 23:04 | |
|
Помогаю со студенческими работами здесь
20
Написать функцию выделения первого слова из строки Написать инструкцию выделения памяти для одного экземпляра заданного класса (динамическая память)
Написать код для динамического выделения памяти под массив из 10000 целых чисел Написать функцию выделения произвольной строки двумерного массива в одномерный Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|