Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 61, средняя оценка - 4.61
PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
#1

Задача с собеседования (аллокатор памяти) - C++

02.09.2012, 00:16. Просмотров 8312. Ответов 23
Метки нет (Все метки)

Вопрос звучит так: "Напишите быстрый аллокатор памяти"
Как я его понимаю: можно пожертвовать растратой памяти, всякими наворотами, возможно максимальной величиной обьекта..

Может у кого-то есть какие-то варианты? Мне что-то ничего в голову не приходит кроме как заранее поделить пул на поля с фиксированным размером N и завести битовое поле в котором храним флаги занято/свободно.. Может подкинете пару идей?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
02.09.2012, 18:37  [ТС]     Задача с собеседования (аллокатор памяти) #16
Заглянул в исходники, там джигурда вобще... Внутернние методы возращают обьекты вроде std::_Base_bitset<16ul> и с ними уже делаются перегруженные операции типа &... И да, ренж чек он тоже делает) Короче будет уроком - не юзать пока не в курсе как оно работает
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
02.09.2012, 18:55     Задача с собеседования (аллокатор памяти) #17
Цитата Сообщение от bgm313 Посмотреть сообщение
Вот в простом варианте:
вопрос по коду на картинке: переменная allocp объявлена как static char *, но она не внутри функции. Она будет вести себя так же, как если бы это была переменная static внутри функции?
Т.к. написано "следующая свободная позиция" - как бы намекает на поведение static-переменных
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
02.09.2012, 19:25     Задача с собеседования (аллокатор памяти) #18
Глобальная static переменная (а также static, объявленная внутри любого namespace) имеет ограниченную область видимости в пределах данного cpp файла, ты об этом?
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
02.09.2012, 19:36     Задача с собеседования (аллокатор памяти) #19
Цитата Сообщение от Герц Посмотреть сообщение
Глобальная static переменная (а также static, объявленная внутри любого namespace) имеет ограниченную область видимости в пределах данного cpp файла, ты об этом?
Да. А её поведение (точнее поведение компилятора относительно неё) в данном куске кода аналогично тому, которое было бы, если бы она была static и внутри функции alloc?
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
02.09.2012, 19:39     Задача с собеседования (аллокатор памяти) #20
Да, внутри функции она точно так же создавалась бы единожды при входе в программу и сохраняла свое значение вплоть до завершения, локальная static переменная подобна глобальной, но с усеченной областью видимости.
PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
02.09.2012, 19:58  [ТС]     Задача с собеседования (аллокатор памяти) #21
Мне кажется в варианте во 2ом посте баг: если выделить 2 блока, потом освободить 1ый, то когда выделим 4ый он перезапишет 2ой (надеюсь я понятно обьяснился).. Или я что-то упустил?
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
02.09.2012, 23:35     Задача с собеседования (аллокатор памяти) #22
Да, внутри функции она точно так же создавалась бы единожды при входе в программу и сохраняла свое значение вплоть до завершения, локальная static переменная подобна глобальной, но с усеченной областью видимости.
Извиняюсь, дал более сильное суждение, чем на деле. Локальная static будет инициализирована лишь при первом достижении её потоком выполнения (то есть при первом вызове alloc, так что поведение не изменится, ведь она нужна лишь для работы alloc ). В остальном - все так же.
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
03.09.2012, 00:12     Задача с собеседования (аллокатор памяти) #23
Цитата Сообщение от Герц Посмотреть сообщение
Извиняюсь, дал более сильное суждение, чем на деле. Локальная static будет инициализирована лишь при первом достижении её потоком выполнения (то есть при первом вызове alloc, так что поведение не изменится, ведь она нужна лишь для работы alloc ). В остальном - все так же.
Я так понимаю, глобальная static-переменная будет инициализирована при запуске программы, а не функции, как в случае с локальной static-переменной, в этом вся разница?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2012, 00:22     Задача с собеседования (аллокатор памяти)
Еще ссылки по теме:
Задание с собеседования (циклы) C++
ООП. Тестовое задание собеседования. C++
C++ Задача на строки с выделением памяти
C++ Задача на динамическое выделение памяти
Требует очень много памяти задача C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
03.09.2012, 00:22     Задача с собеседования (аллокатор памяти) #24
Proof by fire. Да, в этом разница.
Yandex
Объявления
03.09.2012, 00:22     Задача с собеседования (аллокатор памяти)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru