Работа с памятью


Содержание

SBP-Program

Работа с памятью в C

Для работы с памятью в C используют библиотечные функции: free(), malloc(), calloc(), realloc().

используется для освобождения памяти, на которую указывает аргумент pointer. Сначала память выделяется для приложения, после завершения работы с памятью её надо вернуть, этим возвратом и занимается функция free.

_msize

Функция _msize возвращает размер область памяти, выделенной из кучи:

аргумент — указатель на блок памяти. Функция _msize возврашает размер памяти в байтах. size_t — это unsigned integer.

malloc

Функция malloc выделяет область памяти из «кучи» (т.е. свободной области памяти):

аргумент определяет количество байтов, которое надо выделить из памяти. Функция malloc возвращает void указатель на выделенную область памяти, его можно привести к нужному типу. Если свободной для выделения памяти меньше, чем затребовоно в size_t, то функция malloc вернет NULL.

Пример работы с функцией malloc:

здесь выделено место в памяти для массива, состоящего из двух элементов типа int. Если выделение памяти пошло успешно, то освобождаем эту область памяти с помощью функции free.

calloc

Функция calloc выделяет область памяти и размещает в ней массив, инициализированный нулями:

первый аргумент количество элементов, а второй — размер в байтах одного элемента. Произведение значений аргуменов и даст величину области памяти, запрошенной для выделения. Функция calloc возвращает void указатель на выделенную область памяти, его можно привести к нужному типу. Если свободной для выделения памяти меньше, чем затребовоно, то функция calloc вернет NULL.

Пример работы с функцией calloc:

в примере выделяется память для массива типа int, содержащего два элемента. Эти элементы инициализированны нулями. Если выделение памяти пошло успешно, то освобождаем эту область памяти с помощью функции free.

realloc

Функция realloc меняет размер предварительно выделенной области памяти:

первый аргумент — это указатель на область памяти, размер которой нужно изменить, второй аргумент определяет новый размер области памяти. Если этот размер равен нулю, а первый аргумент указывает на имеющуюся область памяти, то функция realloc вернет NULL, а исходный блок памяти, на который указывает первый аргумент, будет освобожден. Если свободной для выделения памяти меньше, чем затребовоно, то функция realloc вернет NULL, а исходный блок памяти, на который указывает первый аргумент, сохраниться и останется без изменений. Функция realloc возвращает void указатель на выделенную область памяти, его можно привести к нужному типу.

Пример работы с функцией realloc:

В примере с помомощью функции malloc выделяем область памяти, далее с помощью функции realloc увеличиваем эту память.

Рабочая память — или работа с памятью?

«Память» не звучит для большинства людей как мистическое понятие. Большинство людей настолько привыкли к этому термину, что часто он используется в очень широком смысле (и тем самым лишаясь смысла), для недифференцированного обозначения всех психических процессов. Спросите десять человек, что делает «память», и ответы будут весьма однотипными: заучивание имен, номеров телефонов, таблицы умножения и зазубривание для выпускного экзамена дат исторических событий, без которых вы вполне можете обойтись. Память является также одним из наиболее интенсивно изучаемых психических процессов. В типичном эксперименте с памятью испытуемого просят запомнить список слов, серию изображений лиц, а затем вспомнить или распознать материал при различных условиях.

К сожалению, как предубеждения широкой публики относительно памяти, так и традиционные способы исследований памяти имеют мало общего с тем, как память функционирует в реальной жизни. В типичном исследовании памяти испытуемого просят запомнить информацию, а затем вспомнить ее. Испытуемый запоминает определенную информацию потому, что экспериментатор инструктирует его таким образом. Запоминание и воспроизведение являются здесь самоцелью, а решение, что запомнить, исходит от экспериментатора, а не от испытуемого.

В большинстве ситуаций реальной жизни мы храним и вспоминаем информацию не ради самого припоминания, а как предпосылку решения стоящей перед нами проблемы. Здесь воспоминание является средством достижения цели, а не самой целью. Более того, и это особенно важно, определенные воспоминания отыскиваются и активируются не в ответ на внешнюю команду, исходящую от кого-то другого, а в ответ на внутреннюю потребность. Мне не говорят, что вспомнить, я сам решаю, какая информация полезна для меня в контексте моей деятельности в данный момент.

Каждый из нас владеет огромным количеством информации. Я знаю расположение парикмахерских на западной стороне Манхеттена, имена ведущих русских композиторов, таблицу умножения, главные аэропорты Австралии, возраст моих родственников и т.д. и т.п. Как же тогда получается, что, сидя сейчас перед моим компьютером и работая над этой книгой, я быстро извлекаю мое знание о лобных долях и пишу о них, а не о Французской революции или о моих любимых ресторанах Нью-Йорка? Более того, как получается, что, проголодавшись после нескольких часов усиленного печатания, я столь же быстро извлекаю мое знание о ближайших ресторанах, а уже не о лобных долях, причем этот переход является мгновенным и не вызывающим никаких затруднений?

Большинство актов припоминания в реальной жизни включает решение о том, какой тип информации полезен для меня в данный момент, и затем отбор информации из всего огромного многообразия всех доступных мне знаний. Более того, как только род наших занятий меняется, мы совершаем плавное, мгновенное переключение от одного вида отбора к другому, а затем снова и снова. Мы осуществляем такие решения, выборы и переходы фактически в каждый момент нашей бодрствующей жизни, большую часть времени автоматически и без усилий. Но при общем объеме различной информации, доступной нам в каждый данный момент времени, эти решения с информационной точки зрения отнюдь не тривиальны. Они требуют сложных нейронных вычислений, производимых лобными долями. Память, основывающаяся на таких постоянно изменяющихся, текучих решениях, выборах и переключениях, направляется лобными долями и называется рабочей памятью. В каждый момент этого процесса нам нужен доступ к специфической информации, которая представляет лишь весьма малую часть нашей памяти в целом. Наша способность доступа к этой памяти подобна мгновенному отыскиванию иголки в стоге сена, и это на самом деле изумительно.


В этом заключается решающее различие между типичным экспериментом по изучению памяти и тем, как память используется в реальной жизни. В реальной жизни я должен сам принять решение о том, что вспомнить. В типичном эксперименте по памяти решение принимается экспериментатором за меня: «Слушайте эти слова и запоминайте их». Перемещая процесс принятия решения от испытуемого к экспериментатору, мы уменьшаем роль лобных долей и задача памяти уже не является задачей рабочей памяти. Рабочая память и лобные доли включены в большинство актов припоминания в реальной жизни, но не в большинство процедур, используемых при исследовании памяти и при обследовании пациентов с расстройствами памяти.

Несоответствие между тем, как память реально используется, и тем, как она экспериментально исследуется, помогает объяснить путаницу относительно роли лобных долей в памяти. Дебаты по этому предмету, до сих пор не приведшие к окончательным выводам, ведутся много лет, с тех пор как Якобсен 3 и Лурия 4 впервые подняли эту тему. В последнее время, в значительной степени благодаря работам нейробиологов Патриции Голдман-Ракич 5 и Хоакина Фюстера 6 роль лобных долей в памяти была подтверждена и получило признание понятие рабочей памяти. Рабочая память тесно связана с той решающей ролью, которую играют лобные доли во временной организации поведения и в контролировании точной последовательности, в которой совершаются различные психические операции, направленные на достижение целей организма 7 . Сегодня понятие рабочей памяти относится к числу наиболее популярных понятий когнитивной нейронауки. Как это бывает с популярными понятиями, оно часто используется произвольно и неопределенно, что иногда граничит с бессмыслицей. Поэтому особенно важно обсудить это понятие аккуратно и точно.

Как только в лобных долях завершен отбор информации, требующейся для решения наличной проблемы, они должны «знать», по крайней мере приблизительно, где эта информация хранится в мозге. Это позволяет предположить, что все корковые области каким-то образом репрезентированы в лобных долях, — утверждение, впервые высказанное Хьюлингсом Джексоном в конце девятнадцатого века 8 . Такие репрезентации являются, вероятно, скорее грубыми, чем специфичными, позволяющими лобным долям знать, где хранится какой тип информации, но не саму специфическую информацию. Лобные доли затем контактируют с соответствующими частями мозга и обеспечивают поступление памяти (или, как говорят ученые, «энграммы») «on-line», путем активации тех нейронных сетей, в которых энграмма заключается. Аналогия между лобными долями и главным управляющим снова оказывается полезной. Подписав новый контракт, директор компании может не иметь технических умений, требуемых для проекта, но он знает, кто из его персонала ими обладает, и способен правильно отобрать сотрудников для проекта, основываясь на их специфических знаниях и умениях.

Так как различные стадии решения проблем могут требовать различных типов информации, лобные доли должны постоянно и быстро активировать новые энграммы, деактивируя при этом старые. Более того, часто мы должны делать быстрые переходы от одной когнитивной задачи к другой и, что еще более осложняет ситуацию, мы регулярно имеем дело со многими проблемами параллельно. Это подчеркивает очень специфическое свойство рабочей памяти: ее постоянно и быстро меняющееся содержание. Представьте, что у вас пять банковских счетов, операции на которых (приход денег и выплаты) совершаются одновременно и часто. Представьте, далее, что для того, чтобы вести свой бизнес, вы должны отслеживать в вашей голове эти пять счетов, не пользуясь блокнотом или компьютером. Вместо того, чтобы запоминать массив статичной информации, вы должны быть способны постоянно обновлять содержание вашей памяти.

Банковская ситуация с пятью счетами звучит довольно фантастично. Но так ли она отлична от задач, с которыми сталкиваются главный управляющий, предприниматель, менеджер совместного фонда, политический или военный руководитель, которые должны отслеживать и действовать в нескольких ситуациях, которые быстро разворачиваются параллельно? Теперь представьте себе жонглера с пятью шарами в воздухе, который должен следить за всеми постоянно движущимися пятью шарами. Теперь представьте себе умственного жонглера, и это будет равносильно управлению корпорацией, бизнесом или научной лабораторией. Это дает нам представление о том, что делает рабочая память. При нарушении функционирования рабочей памяти все шары вскоре окажутся на земле.

Давайте вернемся к нашему главному управляющему. Ему необходимо собрать команду экспертов для сложного, долгосрочного проекта с непредсказуемыми результатами. На каждой стадии проекта он должен найти требуемые знания; решить, как он выйдет на имена экспертов; найти их; помнить их имена и телефоны, по крайней мере пока длится проект; найти средства, диктуемые следующей стадией проекта, и т.д. Представьте себе далее, что на каждой стадии проекта ему нужны эксперты более чем одного типа, так что проводятся различные параллельные поиски. Это будет довольно точное описание рабочей памяти. Рабочая память весьма отлична от активности, которую мы традиционно отождествляем со словом «память» — заучивание и сохранение фиксированного объема информации.

Но роль рабочей памяти не ограничена принятием крупномасштабных решений. Мы зависим от рабочей памяти даже в самых обыденных ситуациях. Вы храните в вашей памяти номера телефонов вашего любимого ресторана и вашего врача. Вы знаете, где вы держите ваши туфли и ваш пылесос. Даже если эта информация всегда в вашей памяти, она не постоянно в фокусе вашего внимания. Когда вам нужно развлечь ваших друзей, вы звоните в ресторан, а не своему врачу. Когда вы утром одеваетесь, вы идете к шкафу, в котором хранятся туфли, а не к шкафу, где помещается пылесос. Эти на вид тривиальные и не требующие усилий решения также требуют рабочей памяти.

Мы обладаем способностью концентрироваться на информации, релевантной данной задаче, и затем переходить к следующему фрагменту релевантной информации. Отбор информации, подходящей для задачи, происходит автоматически и без усилий, и гладкость этого отбора гарантируется лобными долями. Однако пациенты на ранних стадиях деменции часто сообщают о «бессмысленных» действиях. Они могут взять грязные тарелки в спальню вместо кухни, или открыть холодильник в поисках перчаток. Это ранняя поломка способности лобных долей отбирать и активировать информацию, соответствующую задаче. Рабочая память часто страдает на ранних стадиях деменции. Человек с серьезно ухудшившейся рабочей памятью очень быстро окажется в состоянии безнадежной путаницы.

Парадокс рабочей памяти состоит в том, что хотя лобные доли играют решающую роль в доступе и активации информации, релевантной задаче, сами они не содержат этой информации — она находится в других частях мозга. Чтобы продемонстрировать это отношение, Патриция Голдман-Ракич и ее коллеги из Йельского университета изучали задержанные ответы у обезьян 9 . Они вели внеклеточную регистрацию нейронов в лобных долях обезьяны, которые были активны до тех пор, пока энграмма (след памяти) была активирована, и которые выключаются, как только инициирован ответ. Эти нейроны ответственны за активирование энграмм, но не за их хранение.

Различные части префронтальной коры вовлечены в различные аспекты рабочей памяти, и существует своеобразный параллелизм между функциональной организацией лобных долей и задними отделами коры. Было давно известно, что у приматов (включая человека) зрительная система состоит из двух различных компонентов. «Что»-система, простирающаяся вдоль затылочно-височного градиента, перерабатывает информацию, позволяющую отождествлять объекты. «Где»-система, простирающаяся вдоль затылочно-теменного градиента, перерабатывает информацию о местоположении объектов. Вероятно, зрительное пространственное знание также распределено. Память на «что» формируется внутри затылочно-височной системы, а память на «где» — внутри затылочно-теменной системы.

Контролируется ли доступ к этим двум типам зрительной памяти одними и теми же или различными лобными зонами? Сьюзан Кортни и ее коллеги из Национального института психического здоровья ответили на этот вопрос с помощью PET-эксперимента с оригинальной активационной задачей 10 . Предъявлялся набор лиц в формате четыре ряда по шесть изображений, за ним следовал другой набор лиц. Испытуемых просили ответить на «что»-вопрос (Являются ли лица одними и теми же?) или на «где»-вопрос (Появляются ли они на тех же позициях?). Две задачи породили два различных типа активации внутри лобных долей, в нижних частях — для «что», и в верхних частях — для «где». Аналогичные открытия были сделаны Патрицией Голдман-Ракич и ее коллегами из Йельского университета, которые изучали обезьян, используя записи активности одиночных клеток (single-cell recordings) 11 .

По-видимому, различные аспекты рабочей памяти находятся под контролем различных отделов лобных долей. Означает ли это, что каждая часть префронтальной коры связана с особой системой вне лобных долей? Что же случилось с дирижером? Есть ли такая часть лобных долей, вклад которой является поистине универсальным? Удивительно, но несмотря на все попытки, до сих пор не удалось охарактеризовать в специфических терминах функции зоны вокруг лобных полюсов, самого дальнего продолжения лобной доли (зона Бродмана 10). Я не удивлюсь, если будущие исследования покажут, что зоны, непосредственно окружающие лобные полюсы, обслуживают наиболее синтетическую функцию и образуют дополнительный уровень нейронной иерархии над дорзолатеральными и орбитофронтальными областями коры. Синтетические функции, которые эта часть мозга, вероятно, выполняет, обсуждаются в следующем разделе.

Не нашли то, что искали? Воспользуйтесь поиском:

OS/2 изнутри: работа с памятью

В OS/2 программисту доступно 32-разрядное линейное адресное пространство. Как же организована работа с ним? Общие принципы распределения памяти Выделение и фиксация памяти Страницы памяти Способы работы с памятью Объекты

В OS/2 программисту доступно 32-разрядное линейное адресное пространство. Как же организована работа с ним?


Общие принципы распределения памяти

Как известно, при работе в IBM OS/2 программисту доступно 32-разрядное линейное (плоское) адресное пространство со страничной организацией, т. е. все операции с памятью производятся над страницами заданного размера. Каждому запущенному процессу OS/2 выделяет виртуальное адресное пространство размером 512 Мбайт, т. е. максимальный адрес, доступный программе, равен 0x1FFFFFFF (три старших разряда 32-разрядного указателя не используются).

Распределение виртуальной памяти отделено от ее отображения на физическую память компьютера. Благодаря этому разные процессы выполняются «бок о бок», но их виртуальные адресные пространства полностью изолированы друг от друга. Конечно, память, которую процесс фактически может занять при выполнении, ограничена размером ОЗУ компьютера и объемом свободного пространства в том разделе жесткого диска, где расположен файл страничной подкачки SWAPPER.DAT.

Младшие 64 Кбайт адресного пространства зарезервированы для нужд операционной системы, так что минимальный адрес равен 0x10000; он соответствует точке начала EXE-модуля. Вся остальная память делится на совместно используемую (ее должно быть не менее 64 Мбайт) и частную память процесса. Частная память, доступ к которой может получить только процесс-владелец, начинается с младших адресов и растет вверх. Совместно используемая, наоборот, выделяется начиная со старших адресов и растет вниз. Она доступна процессу всегда, даже если реально им не используется.

Илон Маск рекомендует:  stripcslashes - Удаляет экранирование символов, произведенное функцией

Выделение и фиксация памяти

Для работы с памятью необходимо, во-первых, выделить виртуальную память, а во-вторых, отобразить виртуальные адреса на физические — зафиксировать память. Фиксация производится либо одновременно с выделением (тогда фиксируется сразу вся выделенная память), либо позднее (этот подход позволяет зафиксировать как всю выделенную память, так и только ее часть).

Операция, обратная фиксации, — расфиксирование (открепление), обратная выделению — освобождение. Закончив работу с виртуальной памятью, ее обязательно следует освободить, чтобы вернуть соответствующие ресурсы операционной системе. Если программа завершится, не освободив память, возникнет так называемая «утечка памяти»: операционная система будет считать фактически свободную память используемой. Характерным признаком утечки памяти является увеличение объема файла SWAPPER.DAT.

Страницы памяти

Память выделяется и фиксируется порциями по 4 Кбайт, которые, как уже говорилось, называются страницами. Страница памяти может разрешать доступ для чтения, записи, выполнения или быть защищенной (guard page) — в последнем случае обращение к ней приводит к нарушению защиты.

Защищенные страницы, очевидно, нельзя использовать как ограничители, контролирующие границы массивов: если, скажем, запросить память для массива из 512 однобайтовых элементов, система выделит целую страницу, т. е. 4096 байт, так что обращение к элементу номер 513 не вызовет нарушения защиты. Основная функция защищенных страниц — обеспечивать автоматическое возрастание стека. Для массива, размер которого должен увеличиваться в процессе работы программы, можно выделить и зафиксировать две страницы, первая из которых будет доступной для чтения и записи, а вторая — защищенной. При попытке выйти за пределы отведенной страницы произойдет нарушение защиты, и в ответ операционная система (если только программа не обрабатывает эту ошибку самостоятельно) попытается зафиксировать защищенную страницу и отметить как защищенную следующую за ней. В случае неудачи возникает ошибка «Невозможно нарастить стек», после чего программа сможет продолжить работу, но для размещения массива в ее распоряжении будет всего 4096 байт.

Способы работы с памятью



В OS/2 существует несколько способов работы с памятью, или, иначе, типов памяти. Это объекты в памяти, куча, локальная память нити и совместно используемая память. Рассмотрим их особенности.

Объекты в памяти

Основным способом работы с памятью в OS/2 является использование объектов в памяти (memory objects). Объект в памяти всегда состоит из целого числа страниц: при его создании запрошенное число байтов округляется в большую сторону до ближайшего значения, кратного 4 Кбайт. Внутри объекта память резервируется блоками от 1 байта до размера всего объекта.

Для выделения памяти объектам служит функция DosAllocMem, для ее освобождения — функция DosFreeMem, для фиксации и открепления — функция DosSetMem.

При работе с OS/2 рекомендуется не менять размер объектов в памяти, а сразу выделять достаточно большой «разреженный» объект, в котором затем по мере необходимости фиксировать и откреплять порции нужного размера. Например, если программе в большинстве случаев должно хватить около 512 Кбайт памяти, но при определенных условиях потребуется 5 Мбайт, нужно поступить следующим образом:

— при инициализации программы выделить для нее 5 Мбайт (функция DosAllocMem); — зафиксировать первые 512 Кбайт или какую-то их часть (DosSetMem); — продолжить работу программы, по мере необходимости фиксируя и открепляя память; когда потребуется 5 Мбайт, зафиксировать их, а после использования открепить (DosSetMem); — по окончании работы программы освободить память (DosFreeMem).

Куча (heap) — это область внутри объекта в памяти, из которой программа может выделять небольшие блоки; размер блока округляется в большую сторону до ближайшего значения, кратного 8 байтам.

Программисты, пишущие на Си, могут воспользоваться библиотечными функциями управления кучей — new, delete, malloc, strdup, free. Собственные функции менеджера кучи OS/2 называются DosSubSetMem, DosSubUnsetMem, DosSubAllocMem и DosSubFreeMem. Программа инициализирует объект в памяти, вызывая функцию DosSubSetMem, а затем выделяет и освобождает память внутри него с помощью соответственно DosSubAllocMem и DosSubFreeMem. В листинге содержится фрагмент программы, в котором создается объект для подвыделения памяти (размер объекта 8192 байт) и затем выделяются два небольших блока памяти.

По окончании работы с кучей, которая была инициализирована функцией DosSubSetMem, следует вызвать функцию DosSubUnsetMem: она освобождает ресурсы, использовавшиеся для управления кучей. Завершив работу с объектом в памяти, частью которого была куча, память освобождают обычным образом, с помощью функции DosFreeMem. Необходимо следить, чтобы на каждый вызов DosSubSetMem приходился вызов DosSubUnsetMem и чтобы для объектов, содержавших кучу, перед вызовом DosFreeMem вызывалась DosSubUnsetMem.

Следует помнить, что при работе с кучей память фиксируется постранично, т. е. при запросе на подвыделение для массива 512 байт будет зафиксировано 4096 байт. В результате обращение к 513-му байту массива не приведет к нарушению защиты, но при этом может оказаться, что программа обратилась к области памяти, подвыделенной другой нитью процесса.

Локальная память нити

Локальная память нити управления представляет собой небольшую (не более 32 двойных слов, т. е. 128 байт) область специфической памяти, которая отводится нити при инициализации и обычно используется для хранения небольшого числа указателей. Она выделяется функцией DosAllocThreadLocalMemory и освобождается функцией DosFreeThreadLocalMemory.

Функция DosAllocThreadLocalMemory выделяет за один раз восемь двойных слов; если требуется выделить больше, ее необходимо вызвать повторно. Локальная память нити должна использоваться бережно; не следует занимать весь 128-байтовый диапазон.

Совместно используемая память

Совместно используемая память представляет собой объект в памяти, диапазон линейных адресов которого зарезервирован, как уже говорилось, в адресных пространствах всех процессов. Различается именованная и безымянная совместно используемая память. К именованной памяти процесс может обратиться непосредственно по имени, для обращения к безымянной ему необходим указатель, который он должен получить от процесса, создавшего данную безымянную память (не обязательно своего родительского).

Когда несколько процессов работают с одной и той же областью памяти, важно исключить конфликты. Для этого применяются два основных метода. Первый состоит в том, что процессы считывают и записывают информацию по очереди; доступ к памяти обычно контролируется при помощи семафора. При втором методе один процесс подготавливает данные в памяти и затем передает их другому процессу для дальнейшей обработки, а сам освобождает память. Таким образом, при любом методе память в каждый момент времени доступна только одному процессу.

Что с памятью? Отвечают специалисты в области нейронаук

Эксперты в области когнитивных наук коротко отвечают на вопросы о том, как устроена наша память.

Есть такой замечательный сайт — Brainfacts.org. Это совместная инициатива Общества нейронаук, фонда Кавли и фонда Гэтсби. На этом сайте есть огромное количество статей и интерактивных схем, выпускаемых под пристальным вниманием редакторов-ведущих мировых учёных в области нейронаук. А ещё там есть раздел «Спроси эксперта», где специалисты отвечают на вопросы простых смертных. Мы выбрали три вопроса о работе памяти и перевели их для вас.

Существует ли фотографическая память?

Читайте также :

Говоря о фотографической памяти, обычно имеют в виду способность человека очень подробно запоминать визуальную информацию. Предполагается, что такие люди словно делают мысленные снимки так же, как фотоаппарат создаёт статичные изображения, а потом могут вспоминать их без ошибок. Однако фотографической памяти в этом смысле не существует.

Это легко продемонстрировать, попросив людей, которые считают, что обладают фотографической памятью, прочитать две-три строки текста, а затем воспроизвести текст по памяти в обратном порядке. Если бы память работала как фотография, у них бы это получилось, но в жизни такого не происходит.

Память больше похожа на кусочки головоломки, чем на фотографию. Чтобы вспомнить событие прошлого, мы собираем вместе самые запоминающиеся элементы и обычно забываем то, что творилось на фоне, цвет стен, картину на заднем плане, точные формулировки. Пропуская детали, мы формулируем основное содержание. Мы хорошо помним суть случившегося и плохо — частные элементы. Это выгодно, потому что содержание события важнее, чем детали.

Конечно, у разных людей способность к запоминанию отличается. То, насколько хорошо мы запоминаем вещи, зависит от того, насколько сильно мы обращали на них внимание. Кроме того, на способность запоминать влияет то, как мы воспроизводим материал в сознании и соотносим его с уже известным.

Некоторые люди с хорошей памятью используют специальные техники для её развития. Другие могут без усилий вспомнить большое количество автобиографической информации из разных сфер жизни. Исследователи узнают больше о памяти и её механизмах, изучая таких людей, а также тех, кто страдает нарушениями памяти из-за болезни или травм.

Как помочь ученикам лучше запоминать информацию?

Всякий, кто когда-либо готовился к экзаменам, однажды задавал себе вопрос — как поместить в мозг побольше информации и подольше её сохранить? Вот два практических способа, основанных на экспериментальных данных.


Совет 1: больше отдыхать

Читайте также :

Около 130 лет назад немецкий психолог Германн Эббингаус провёл значимую серию исследований по изучению памяти человека. Результаты показали, что отдых перед новым обращением к материалу даёт преимущества. Это наблюдение теперь известно как эффект интервального повторения.

С момента открытия Эббингауса сотни исследований подтвердили: занятия, которые разнесены во времени, приносят больше пользы в плане запоминаемости материала, чем то же количество занятий, следующих друг за другом впритык.

Мы всё ещё изучаем, как именно работает интервальный механизм. Чтобы сформировать долговременную память, синапсические связи укрепляются, а это требует производства клеточных белков. Есть основания предполагать, что разнесённое обучение улучшает производство этих белков.

Таким образом, для более успешных результатов требуется делать перерывы во время занятий и, когда это возможно, дробить уроки на части.

Совет 2: многократная проверка

Кажется логичным, что всё главное, что связано с запоминанием материала, случается, когда мы учимся чему-то впервые, а последующие контрольные и тесты нужны только для измерения и оценки. Однако проверка знаний имеет большее значение, чем кажется на первый взгляд.

Работы исследователей памяти выявили важность обучения с расширенным тестированием. Главный вывод заключается в том, что регулярная проверка может значительно улучшить способность вызывать материал в памяти. Интересно, что повторное изучение материала не принесло таких результатов. Это указывает на то, что при формировании долговременных воспоминаний восстановление информации в памяти может играть более значимую роль, чем запоминание.

Неврологическая основа этого явления неясна. Однако популярная гипотеза предполагает, что припоминание уже известного активизирует процесс укрепления нейронных связей.

Откуда берётся дежавю?

Читайте также :

Дежавю — это странное чувство, когда нам кажется, что с нами уже происходило то, что мы вообще-то совершенно точно переживаем в первый раз. Изучать дежавю в лабораторных условиях трудно, ведь явление это редкое и трудно воспроизводимое.

Тем не менее, есть нечто общее между дежавю и более распространенной ситуацией, при которой кто-то кажется знакомым, хотя вы не помните имени этого человека и обстоятельств знакомства. В отличие от дежавю, учёные могут воспроизвести такое ощущение узнавания в лаборатории. Один из способов сделать это — попросить участников исследования оценить лица и места, как виденные ранее, так и нет.

Такие исследования помогли учёным понять, что узнавание и воспоминание — это две разные формы памяти, которые работают вместе. Чувство смутного узнавания люди испытывают легко, а вот конкретное воспоминание, требующее установления ассоциаций и критического подхода, занимает больше времени. Например, если какой-то человек кажется вам знакомым, вы сможете разобраться, кто он такой, поговорив с ним и достроив картину.

Функциональные исследования с помощью МРТ показали, что в распознавании знакомых изображений участвуют перирхинальная кора и прилегающая область, называемая корой парафтопампала. Оба этих отдела отправляют информацию в гиппокамп, который также участвует в работе памяти. Полный опыт воспоминания может представлять собой объединение сходящихся сигналов от перирхинальной и парафтопампальной области.

Работа с памятью

Нужно понимать, что каждая переменная занимает какой-то объем памяти, в зависимости от ее типа. Ниже представлены основные типы переменных, диапазон их значений и занимаемая память.

ТИП | ДИАПАЗОН | ПАМЯТЬ(БАЙТ)

bool | 0 — 255 | 1
char | 0 — 255 | 1
short int | -32 768 — 32 767 | 2
unsigned short int | 0 — 65 535 | 2
int | -2 147 483 648 — 2 147 483 647 | 4
unsigned int | 0 — 4 294 967 295 | 4
long int | -2 147 483 648 — 2 147 483 647 | 4
float | -2 147 483 648.0 — 2 147 483 647.0 | 4
long float | -9 223 372 036 854 775 808 .0 — 9 223 372 036 854 775 807.0 | 8
double | -9 223 372 036 854 775 808 .0 / 9 223 372 036 854 775 807.0 | 8

И так, выше мы ознакомились с диапазоном значений переменных и занимаемую ими память. Но как же нам с этой памятью работать? В этом нам помогут указатели, а так же операторы new и delete. Для начала, что же такое указатели? Указатель — это переменная, значением которого является адрес ячейки памяти. Как известно, у каждой переменной есть свой индивидуальный адрес памяти, которую она занимает. взять этот адрес мы можем при помощи оператора взятия адреса ‘&’. Для наглядности, рассмотрим код ниже.

Мы создали целочисленную переменную и инициализировали ее. Далее, в первой строке консоли мы вывели ее значение(10), а затем и адрес(0018FCB8).

Теперь, когда мы мы знакомы с адресами памяти и указателями, научимся их использовать во благо игростроя. Для чего же они в нем используются? Для примера, возьмем такую игру, как GTA. Все мы наверняка в нее играли, да и пример получится очень наглядным.
Если стоять на одном месте, то NPC будут проходить мимо главного героя, и, отойдя на определенную дистанцию, исчезнут(выгрузятся). Если бы они просто выгружались, тогда оптимизацией это служило бы слабой, так как у нас остались переменные от них, которые занимают какую-то память. Поэтому, эту память нужно динамически создавать и очищать.
Рассмотрим код ниже.

В нем есть создание переменной с выделенной под нее память(int *a = new int();), инициализировали ее(*a = 10;), использовали(cout

СпискиЧтобы помнили: как работает наша память и что изменит её в будущем

Главные исследования памяти последних лет

Без памяти человек не был бы человеком. Но что такое память? С научной точки зрения это информация о мире, которая закодирована в набор сигналов, изменяющих связи между нейронами в головном мозге. Каждый раз, когда мы вспоминаем детали эпизода «Настоящего детектива», историческое событие или математическую формулу, активируется определённая нейронная цепочка. Однако многое о механизме памяти до сих пор остаётся неизвестным. Например, учёные так и не могут доподлинно сказать, фокусируются ли воспоминания в конкретных нейронах или распределяются по всему мозгу.


В этом материале мы попытались разобраться в последних исследованиях нейрофизиологов и психологов и понять, как они могут помочь при лечении болезни Альцгеймера, возможно ли стереть «наркотическую» память, сработает ли в будущем сценарий «Вечного сияния чистого разума» и при чём тут гены и молекулы белка.

Как устроена память

Изучая память, учёные имеют дело с десятью миллиардами нейронов и связями между ними. Все системы мозга важны для памяти, но ключевым механизмом является изменение в синапсах — местах контакта между двумя нейронами. Наличие этих микроскопических щелей объясняет то, что отростки одного нейрона никогда не сливаются с отростками другого.

Запоминание — это молекулярный процесс, связанный с синтезом белка, который активирует нейронные цепочки. Архитектуру этой схемы определяют гены. На образование одной молекулы белка уходит 48 часов, но изменённое в результате запоминания количество белка в определённых местах остаётся неизменным.

Когда нам нужно извлечь из памяти, например, номер телефона, активируется та же сеть нейронов, которая была задействована при его запоминании. Ещё есть гипотеза, что так происходит из-за изменения в РНК, которая синтезирует новый белок. Каждый новый бит информации изменяет его, а следующие биты примеряются к существующим белкам – если примерка проходит удачно, мы вспоминаем нужную информацию.

Процедурная память не связана
с гиппокампом.
Именно поэтому нельзя разучиться ездить на велосипеде

Разные отделы мозга отвечают за разные виды памяти: например, теменная кора хранит навыки игры на музыкальных инструментах, а гиппокамп занимается формированием новых воспоминаний. Именно он был удалён у самого медийного пациента в истории нейронауки — HM, или Генри Густава Моллисона. После операции он не мог получать новую информацию, а помнил только своё детство, зато отлично справлялся с интеллектуальными головоломками. Моллисон помог учёным понять, что процедурная память не связана с гиппокампом. Именно поэтому нельзя разучиться ездить на велосипеде. Мозг Генри завещали науке — в веб-версии он представлен картой, по которой можно изучать дифференциацию нейронов и основы разных видов памяти.

В науке о памяти по-прежнему много вопросов без ответов. Например, не известны механизмы долгосрочного сохранения воспоминаний. Американский учёный Эндрю Куб активно выступал с гипотезой первостепенной важности глиальных клеток мозга в процессах памяти. В книге «Источник мысли» он делает упор на астроциты, говоря о том, что 80% синаптических контактов окружено этими клетками звёздчатой формы. Согласно его гипотезе, они влияют на рост аксонов, которых в мозге Эйнштейна было выявлено очень много. Именно они обеспечили превосходную работу его памяти и великие открытия. Позже эта идея была опровергнута в ходе экспериментов. Глиальная ткань была выращена в искусственной среде, где было зафиксировано отсутствие какой-либо активности. Её роль в мозге сводится к изоляции реакции между нейронами и предотвращению искажений информации. Одно ясно точно: после восприятия информации наш мозг, опираясь на генетический аппарат, изменяется и никогда не остаётся прежним. Поэтому, например, философ Роберт Добелли советует людям ограждаться от потока новостей, которые атакуют краткосрочную память, которая так и не переходит в долгосрочную.

Как учёные научились редактировать воспоминания?

В наш мозг встроен естественный механизм апдейта — память о событии меняется в зависимости от накопленных знаний, опыта и текущих желаний. Если вы сейчас голодны и вспоминаете свой десятый день рождения, то воспоминание о праздничном торте будет отчётливее, чем интерьер или лица друзей.

Илон Маск рекомендует:  Выравниваем содержимое tcombobox по правую сторону

Наркотическая память

Нейробиологи из исследовательского института Эллен Скриппс во Флориде и университета Северной Каролины работают над тем, чтобы ликвидировать «наркотическую» память фармакологическим путём, что может помочь в борьбе с наркозависимостью. В ходе исследования мышам давали метамфетамин, сочетая препарат с воздействием нетипичных для их жизни стимулов. После двух дней (пока закреплялась новая память) вводился препарат, вызывающий разрушение актина. Этот белок играет роль в консолидации памяти. В результате мыши забывали о наркотическом опыте, потому что эта память формировалась отдельно от других воспоминаний. Стирание этих воспоминаний оказалось возможным без провоцирования тотальной ретроградной амнезии.

Избавление от негативных переживаний

«Молекула памяти» PKMζ. Картинка из слайдов к лекции П. М. Балабана на Зимней научной школе Future Biotech

Джозеф Леду из Нью-Йоркского университета проводил эксперименты с памятью о страхе у крыс. Сначала он усиленно тренировал животных ассоциировать громкий звук с электрошоком, а потом вводил в миндалевидное тело инъекцию вещества, блокирующего синтез протеинов. Память о страхе уходила. Результаты этого эксперимента подкрепляются данными о людях с повреждениями миндалевидного тела — у них точно так же отсутствуют травматические воспоминания.

Однако самой важной молекулой в процессе «стирания» воспоминаний и функционировании долговременной памяти остаётся молекула белка протеинкиназа М-зета. Согласно исследованиям Тодда Сактора из Медицинского центра Нью-Йоркского университета, она определяет эффективность нейронного контакта и очень важна для долговременного запоминания. При этом её можно заблокировать, стерев память, а затем «возродить» синтез молекулы путём обучения. Её важность продолжают оспаривать экспериментально, фиксируя отсутствие значительных изменений в памяти при её блокировке. Сактор говорит, что всё дело в наличии компенсаторных генов. Но для того, чтобы стереть нужное воспоминание, нужны надёжные наномеханизмы доставки антител.

Внедрение ложной памяти

В ходе серии экспериментов, проведённых командой учёных из Массачусетского технологического института под руководством нобелевского лауреата Судзуми Тонегавы, мышам удалось «внедрить» память о ложном событии. С помощью генных модификаций и вживления в мозг оптоволокна у них получилось заставить мышь бояться одну клетку (при помощи ударов по ногам), в то же время перезапуская её память и удаляя болезненные ассоциации с этой клеткой. Так была доказана гипотеза о том, что каждое воспоминание оставляет в мозге след — энграмму. «То, что ранее можно было увидеть в таких фильмах, как „Начало“ и „Вечное сияние чистого разума“, теперь становится возможным», — рассказал один из членов команды Тонегавы. И пусть пока эксперимент далёк от сюжета сай-фая, он даёт надежду на разработку мозговых чипов для внедрения разнообразных воспоминаний.

Протез памяти

Теодор Бергер из университета Южной Калифорнии с 90-х годов работает над силиконовым имплантом памяти в гиппокамп. Его устройство может заменять части повреждённого гиппокампа и даже усиливать способности здорового. Крошечный чип с электродами имплантируется в гиппокамп и записывает сигналы, представляющие собой краткосрочные воспоминания; далее сигналы пересылаются в компьютер, где математически преобразуются в долгосрочные воспоминания; а затем отправляются на второй набор электродов, который стимулирует другой отдел гиппокампа. Устройство должно пролить свет на то, как именно в мозге кодируются воспоминания человека и по какому принципу мы помним «лицо любимой бабушки» и отличаем его от других. Пока эксперименты успешно проводятся на крысах и обезьянах, а в течение двух лет начнутся и на людях. Сам Бергер говорит, что никогда не думал о том, что исследования зайдут так далеко. Теперь же он может помочь спасти пациентов с болезнью Альцгеймера и прочими расстройствами памяти.

Путь от кратковременной
к долгосрочной памяти

Учёные до сих пор не могут до конца понять, как долгосрочная память остаётся на всю жизнь, если протеины, участвовавшие в её формировании, исчезают в течение двух дней. Группа учёных из Института медицинских исследований Стауэрса доказала важность олигомеров CPEB в этом процессе. Эти молекулы — версия комбинации клавиш Ctrl+V в нервной системе. Они постоянно самовоспроизводятся, и, вероятно, именно поэтому мы можем извлекать из памяти информацию о том, что было давным-давно.

Редактирование неприятного опыта

Пока избавление от негативных воспоминаний, последствий посттравматического стресса и фобий — прерогатива психологии. Но гарвардский профессор Роджер Питман и профессор психиатрии Университета Макгилла Ален Брюне спешат психологам на помощь, за что журнал Forbes в своё время даже включил их в рейтинг «Десять человек, способных изменить мир».

В ходе опытов исследователи обнаружили препарат для устранения причины тяжёлых воспоминаний, а также научились различать воспоминания неприятные и травмирующие, чтобы сосредоточиться исключительно на борьбе со вторыми. Ключ к различию между ними скрыт в эмоциональной реакции. Пациенты, участвующие в эксперименте, детально фиксировали свои травмирующие воспоминания и перечитывали свои записи, предварительно приняв препарат пропранолол. Это лекарство от гипертонии, содержащее норадреналин, который участвует в генерации сильных эмоций. Через некоторое время эмоциональная память пациентов стала изменяться, и они переставали ассоциировать травматическое воспоминание с неприятными ощущениями. Приём анаприлина в течение нескольких часов после психотравмы также резко снижает шансы развития посттравматического синдрома. В таком случае воспоминание останется, но патологически болезненным оно не будет.

Память и правосудие

Психолог Элизабет Лофтус провела серию любопытных психологических экспериментов по «вживлению» ложных воспоминаний. Она показывала участникам, бывавшим в Диснейленде, фотографию из парка, где посетитель жал руку Багз Банни. Несколько участников вспомнили, что делали то же самое, хоть это и невозможно, так как Багз Банни — персонаж Warner Bros.


Её команда психологов опросила жертв 11 сентября; через год эксперимент был повторен и 37% воспоминаний тех же людей изменились. Некоторые истории становились более короткими с чёткой линией повествования, другие обрастали несуществующими подробностями. Дело в том, что при воспоминании пережитого важно получение позитивного фидбэка от собеседника. Этот факт также часто приводит к неправильной идентификации преступника. Так как наша память представляет собой синтез опытов, а не воспроизведение видеоряда, свидетель не может быть важнейшей опорой правосудия. Эту идею успешно защищает Innocence Project, который предлагает увидеть, как американская судебная система отходит от полагания на память жертвы к другим более достоверным источникам — ДНК-экспертизам и другим методам.

Память в эпоху
мобильного Интернета

Если мы вдруг забываем имя актёра или содержание книги, обычно идём «гуглить» касты фильмов или серфить «Википедию». Всё это оказывает серьёзное влияние на нашу память. Учёные из Университета Колумбии провели эксперимент и показали, как компьютеры успели изменить процесс запоминания. Подопытным дали набор фактов и половину из них попросили классифицировать информацию в папках на компьютере, а второй половине сказали, что эту информацию потом сотрут. Когда подопытных попросили вспомнить информацию, оказалось, что вторая группа (те, кто ожидал стирания информации) помнила намного больше информации, чем первая группа, кто просто сохранил информацию на ПК. Но подопытные из первой группы, которая сохраняла информацию, прекрасно помнили, куда именно они сохранили полученную информацию. Таким образом учёные доказали, что процесс запоминания адаптируется к новым технологиям. Люди стали сводить к минимуму время на запоминание самой информации, делая ставку на место, где её можно будет найти.

Музыка,
вызывающая воспоминания

Знакомая песня часто становится саундтреком к видеоряду из воспоминаний, который начинает проигрывать наш мозг. Мозговым iTunes выступает медиальная префронтальная кора — это показали эксперименты с использованием магнитно-резонансной стимуляции и воспроизведения чарта Billboard Top 100. Также серия экспериментов показала, что музыка помогает лечить автобиографическую амнезию и способна помочь пациентам с болезнью Альцгеймера.

Связь лишнего веса с памятью

Чикагский
медицинский центр Rush

Печень и часть лимбической системы головного мозга — гиппокамп — используют один и тот же протеин PPAR-альфа. Только печень — для сжигания жира на животе, а гиппокамп — для процессов запоминания информации. Именно поэтому ухудшение памяти в 3,6 раза чаще наблюдается у пациентов с лишним весом, о чём свидетельствуют исследования Чикагского медицинского центра Rush. Известно, что улучшает консолидацию долговременных воспоминаний кофеин, однако пока учёным не удалось установить необходимую дозировку.

Как работает человеческая память?

На сегодняшний день даже ответ на базовый вопрос — что собой представляет память во времени и пространстве — может состоять в основном из гипотез и предположений. Если говорить о пространстве, то до сих пор не очень понятно, как память организована и где конкретно в мозге расположена. Данные науки позволяют предположить, что элементы ее присутствуют везде, в каждой из областей нашего «серого вещества». Более того, одна и та же, казалось бы, информация может записываться в память в разных местах.

Например, установлено, что пространственная память (когда мы запоминаем некую впервые увиденную обстановку — комнату, улицу, пейзаж) связана с областью мозга под названием гиппокамп. Когда же мы попытаемся достать из памяти эту обстановку, скажем, десять лет спустя — то эта память уже будет извлечена из совсем другой области. Да, память может перемещаться внутри мозга, и лучше всего этот тезис иллюстрирует эксперимент, проведенный некогда с цыплятами. В жизни только что вылупившихся цыплят играет большую роль импринтинг — мгновенное обучение (а помещение в память — это и есть обучение). Например, цыпленок видит большой движущийся предмет и сразу «отпечатывает» в мозге: это мама-курица, надо следовать за ней. Но если через пять дней у цыпленка удалить часть мозга, ответственную за импринтинг, то выяснится, что… запомненный навык никуда не делся. Он переместился в другую область, и это доказывает, что для непосредственных результатов обучения есть одно хранилище, а для длительного его хранения — другое.

Запоминаем с удовольствием

Но еще более удивительно, что такой четкой последовательности перемещения памяти из оперативной в постоянную, как это происходит в компьютере, в мозге нет. Рабочая память, фиксирующая непосредственные ощущения, одновременно запускает и другие механизмы памяти — среднесрочную и долговременную. Но мозг — система энергоемкая и потому старающаяся оптимизировать расходование своих ресурсов, в том числе и на память. Поэтому природой создана многоступенчатая система. Рабочая память быстро формируется и столь же быстро разрушается — для этого есть специальный механизм. А вот по‑настоящему важные события записываются для долговременного хранения, важность же их подчеркивается эмоцией, отношением к информации. На уровне физиологии эмоция — это включение мощнейших биохимических модулирующих систем. Эти системы выбрасывают гормоны-медиаторы, которые изменяют биохимию памяти в нужную сторону. Среди них, например, разнообразные гормоны удовольствия, названия которых напоминают не столько о нейрофизиологии, сколько о криминальной хронике: это морфины, опиоиды, каннабиноиды — то есть вырабатываемые нашим организмом наркотические вещества. В частности, эндоканнабиноиды генерируются прямо в синапсах — контактах нервных клеток. Они воздействуют на эффективность этих контактов и, таким образом, «поощряют» запись той или иной информации в память. Другие вещества из числа гормонов-медиаторов способны, наоборот, подавить процесс перемещения данных из рабочей памяти в долговременную.

Механизмы эмоционального, то есть биохимического подкрепления памяти сейчас активно изучаются. Проблема лишь в том, что лабораторные исследования подобного рода можно вести только на животных, но много ли способна рассказать нам о своих эмоциях лабораторная крыса?

Если мы что-то сохранили в памяти, то порой приходит время эту информацию вспомнить, то есть извлечь из памяти. Но правильно ли это слово «извлечь»? Судя по всему, не очень. Похоже, что механизмы памяти не извлекают информацию, а заново генерируют ее. Информации нет в этих механизмах, как нет в «железе» радиоприемника голоса или музыки. Но с приемником все ясно — он обрабатывает и преобразует принимаемый на антенну электромагнитный сигнал. Что за «сигнал» обрабатывается при извлечении памяти, где и как хранятся эти данные, сказать пока весьма затруднительно. Однако уже сейчас известно, что при воспоминании память переписывается заново, модифицируется, или по крайней мере это происходит с некоторыми видами памяти.

Не электричество, но химия

В поисках ответа на вопрос, как можно модифицировать или даже стереть память, в последние годы были сделаны важные открытия, и появился целый ряд работ, посвященных «молекуле памяти».

На самом деле такую молекулу или по крайней мере некий материальный носитель мысли и памяти пытались выделить уже лет двести, но все без особого успеха. В конце концов нейрофизиологи пришли к выводу, что ничего специфического для памяти в мозге нет: есть 100 млрд нейронов, есть 10 квадрильонов связей между ними и где-то там, в этой космических масштабов сети единообразно закодированы и память, и мысли, и поведение. Предпринимались попытки заблокировать отдельные химические вещества в мозге, и это приводило к изменению в памяти, но также и к изменению всей работы организма. И лишь в 2006 году появились первые работы о биохимической системе, которая, похоже, очень специфична именно для памяти. Ее блокада не вызывала никаких изменений ни в поведении, ни в способности к обучению — только потерю части памяти. Например, памяти об обстановке, если блокатор был введен в гиппокамп. Или об эмоциональном шоке, если блокатор вводился в амигдалу. Обнаруженная биохимическая система представляет собой белок, фермент под названием протеинкиназа М-зета, который контролирует другие белки.

Одна из главных проблем нейрофизиологии — невозможность проводить опыты на людях. Однако даже у примитивных животных базовые механизмы памяти схожи с нашими.

Молекула работает в месте синаптического контакта — контакта между нейронами мозга. Тут надо сделать одно важное отступление и пояснить специфику этих самых контактов. Мозг часто уподобляют компьютеру, и потому многие думают, что связи между нейронами, которые и создают все то, что мы называем мышлением и памятью, имеют чисто электрическую природу. Но это не так. Язык синапсов — химия, здесь одни выделяемые молекулы, как ключ с замком, взаимодействуют с другими молекулами (рецепторами), и лишь потом начинаются электрические процессы. От того, сколько конкретных рецепторов будет доставлено по нервной клетке к месту контакта, зависит эффективность, большая пропускная способность синапса.

Белок с особыми свойствами

Протеинкиназа М-зета как раз контролирует доставку рецепторов по синапсу и таким образом увеличивает его эффективность. Когда эти молекулы включаются в работу одновременно в десятках тысяч синапсов, происходит перемаршрутизация сигналов, и общие свойства некой сети нейронов изменяются. Все это мало нам говорит о том, каким образом в этой перемаршрутизации закодированы изменения в памяти, но достоверно известно одно: если протеинкиназу М-зета заблокировать, память сотрется, ибо те химические связи, которые ее обеспечивают, работать не будут. У вновь открытой «молекулы» памяти есть ряд интереснейших особенностей.

Во-первых, она способна к самовоспроизводству. Если в результате обучения (то есть получения новой информации) в синапсе образовалась некая добавка в виде определенного количества протеинкиназы М-зета, то это количество может сохраняться там очень долгое время, несмотря на то что эта белковая молекула разлагается за три-четыре дня. Каким-то образом молекула мобилизует ресурсы клетки и обеспечивает синтез и доставку в место синаптического контакта новых молекул на замену выбывших.

Во-вторых, к интереснейшим особенностям протеинкиназы М-зета относится ее блокирование. Когда исследователям понадобилось получить вещество для экспериментов по блокированию «молекулы» памяти, они просто «прочитали» участок ее гена, в котором закодирован ее же собственный пептидный блокатор, и синтезировали его. Однако самой клеткой этот блокатор никогда не производится, и с какой целью эволюция оставила в геноме его код — неясно.

Третья важная особенность молекулы состоит в том, что и она сама, и ее блокатор имеют практически идентичный вид для всех живых существ с нервной системой. Это свидетельствует о том, что в лице протеинкиназы М-зета мы имеем дело с древнейшим адаптационным механизмом, на котором построена в том числе и человеческая память.

Конечно, протеинкиназа М-зета — не «молекула памяти» в том смысле, в котором ее надеялись найти ученые прошлого. Она не является материальным носителем запомненной информации, но, очевидно, выступает в качестве ключевого регулятора эффективности связей внутри мозга, инициирует возникновение новых конфигураций как результата обучения.

Внедриться в контакт

Сейчас эксперименты с блокатором протеинкиназы М-зета имеют в некотором смысле характер «стрельбы по площадям». Вещество вводится в определенные участки мозга подопытных животных с помощью очень тонкой иглы и выключает, таким образом, память сразу в больших функциональных блоках. Границы проникновения блокатора не всегда ясны, равно как и его концентрация в районе участка, выбранного в качестве цели. В итоге далеко не все эксперименты в этой области приносят однозначные результаты.


Подлинное понимание процессов, происходящих в памяти, может дать работа на уровне отдельных синапсов, но для этого необходима адресная доставка блокатора в контакт между нейронами. На сегодняшний день это невозможно, но, поскольку такая задача перед наукой стоит, рано или поздно инструменты для ее решения появятся. Особые надежды возлагаются на оптогенетику. Установлено, что клеткой, в которой методами генной инженерии встроена возможность синтеза светочувствительного белка, можно управлять с помощью лазерного луча. И если такие манипуляции на уровне живых организмов пока не производятся, нечто подобное уже делается на основе выращенных клеточных культур, и результаты весьма впечатляющи.

Автор — доктор биологических наук, член-корреспондент РАН, профессор, директор ИВНДиНФ РАН

Принципы работы с памятью в системе Windows32

В данной статье изучаются принципы работы с памятью в системе Windows 32. Исследуется проблема накопления потоковых данных в специальных потоковых хранилищах. Работа с памятью является одной из важнейших функций любой программы. Выделение участков памяти для структур программы должно быть эффективным, поэтому программист должен хорошо разбираться в особенностях этого процесса.

В статье приводятся только основные принципы работы с памятью в системе Windows 32. Для подробного изучения всех тонкостей этого сложного процесса читатель может обратиться к специальной литературе. Особенно хочется отметить книгу: Дж.Рихтер, «Windows для профессионалов».

2. Организация виртуальной памяти в Windows

Как известно, Windows 32 — тридцатидвуразрядная операционная система (число 32 как раз это и обозначает). Прежде всего, из этого следует, что запущенная программа может адресовать линейное адресное пространство размером 2^32 байт = 4 ГБ, при этом адресация производится при помощи тридцатидвуразрядных регистров-указателей. Каждый запущенный в системе процесс обладает своим собственным адресным пространством, каждое из которых не пересекается с адресными пространствами других процессов. Распределение системных областей в адресном пространстве систем Windows 95/98 и Windows NT различно.

Илон Маск рекомендует:  Что такое код wddx_packet_end

Программа может адресовать любую ячейку памяти в диапазоне адресов своего адресного пространства. Однако, это не значит, что программа может записать или считать данные из этой ячейки. Адресное пространство в Windows — виртуально, оно не связано напрямую с физическим пространством оперативной памяти вашего компьютера.

Механизм выделения памяти в Windows состоит из двух фаз. Первая фаза выделения памяти состоит в резервировании (захвате) участка необходимого размера в адресном пространстве процесса. При этом не выделяется ни байта реальной памяти (не считая системных структур ядра). Вы можете спокойно зарезервировать участок адресного пространства размером 100 мегабайт, и это ничего не будет стоить системе. Вы можете указать какие адреса вы хотели бы занять, а можете предоставить выбор участка необходимого размера самой системе. Стоит отметить, что адресное пространство резервируется с гранулярностью 64 кБ. Это значит, что несмотря на указанные вами адреса, базовый адрес реально зарезервированного участка памяти будет кратен 64 кБ. При резервировании участка в адресном пространстве можно указать желаемый аттрибут, который регулирует доступ к этой памяти: запись данных, чтение данных, выполнение кода или комбинацию этих признаков. Нарушение правил доступа к памяти приводит к генерации системой исключения.

Вторая фаза выделения памяти в Windows — это выделение реальной, физической памяти в зарезервированный участок виртуального адресного пространства. На этом этапе системой выделяется реальная память, со всеми вытекающими из этого последствиями. Выделение реальной памяти также гранулярно. Минимальный блок реальной памяти, которым оперирует система, и который можно выделить, называеся страницей памяти. Размер страницы зависит от типа операционной системы и составляет для Windows 95/98 — 4 кБ, а для Windows NT — 8 кБ. Гранулярность при резервировании участка памяти и при выделении реальной памяти призвана облегчить нагрузку на ядро системы.

Выделение реальной памяти происходит постранично, при этом существует возможность выделения произвольного количества страниц в произвольные (кратные размеру страницы) адреса заранее зарезервированного участка адресного пространства процесса. Каждой странице может быть назначен свой собственный атрибут доступа. Желательно указывать тот же самый атрибут, что имеет зарезервированный участок адресного пространства в котором происходит выделение страницы реальной памяти.

Важным моментом в механизме выделения памяти является механизм динамической выгрузки и загрузки страниц памяти. В самом деле, современный компьютер имеет оперативную память объемом 16-256 МБ, а для совместной работы нескольких программ необходимо гораздо больше. Windows, как и большинство современных операционных систем, выгружает страницы памяти, к которым давно не было обращений, на жесткий диск в так называемый своп-файл. При этом размер реальной памяти, доступной для программ, становиться равным суммарному объему оперативной памяти и своп-файла. По возможности, система старается держать все страницы в оперативной памяти, однако когда суммарный размер выделенных всеми процессами страниц превышает ее размер, система выгружает страницы с давним доступом на диск, а на их месте выделяет новые страницы. Если же выгруженная на диск страница затребуется владеющим ею процессом, система освободит для нее место в оперативной памяти путем выгрузки редко используемой страницы, загрузит затребованную страницу на ее место и вернет управление процессу.

Весь механизм динамической загрузки и выгрузки страниц абсолюдно прозрачен для процессов, а реализация этого механизма полностью обеспечивается операционной системой. Процесс может абсолюдно ничего не знать о сущесвовании такого механизма — он обращается к своим ячейкам памяти, а система автоматически выгружает редко используемые страницы и загружает необходимые страницы; процесс может только регулировать некоторые нюансы работы этого механизма.

На основании вышеперечисленного можно сделать следующие выводы:

каждый процесс со всеми своими потоками имеет отдельное и независимое линейное адресное пространство размером 4 Гб;

выделение памяти состоит из двух фаз: резервирования адресного пространства и выделение в нем реальной памяти;

при резервировании участка адресного пространства существует гранулярность размером 64 кБ;

выделение реальной памяти производится постранично, размер страницы записит от типа операционной системы;

каждой странице моежт быть назначен свой собственный атрибут доступа, нарушение которого приводит к генерации исключения системой;

операционная система динамически выгружает редко используемый страницы памяти на из оперативной памяти на жесткий диск, причем этот механизм прозрачен для всех процессов.

3. Кучи и менеджеры куч

Алгоритмы современных программ используют механизмы выделения и освобождения памяти очень интенсивно. Строки, динамические массивы, объекты, структуры, буфера — выделение и освобождение этих элементов происходит очень часто, при этом оказывается, что все эти элементы имеют небольшой размер.

Выделение у системы большого количества объектов небольшого размера оказывается неэффективным по следующим причинам.

частое обращение на выделение памяти снижает производительность, так как резервирование адресного пространства и выделение реальной памяти происходит на уровне ядра операционной системы;

из-за страничной организации памяти (гранулярности) выделение памяти происходит с большими издержками; запрос на выделение 100-байтного участка приводит к выделению одной страницы памяти с размером 4 или 8 кБ.

Решение этой проблемы организуется следующим образом: у операционной системы выделяется достаточно большой участок памяти, а уже из него для прикладной программы «нарезаются» небольшие участки. Такая организация называется кучей, а механизм, который следит за выделением и освобождением участков памяти называется менеджером кучи. Куча позволяет решить как проблему потери производительности — менеджер кучи может функционировать на уровне прикладной программы, так и проблему гранулярности — менеджер запрашивает у системы один большой участок памяти.

Windows имеет свою собственную реализацию менеджера кучи, который позволяет приложениям создавать, уничтожать кучи, а также производить с ними операции выделения и освобождения памяти в куче. Кроме того, для каждого вновь создаваемого процесса Windows специально создает кучу по умолчанию, которая используется при работе API функций, а также может быть использована прикладной программой. Все создаваемые Windows кучи потоко-безопасны, то есть существует возможность обращения к одной и той же куче из разных потоков одновременно.


Инженеры компании Borland по видимому не доверяют инженерам компании Microsoft, поэтому каждая программа на Delphi имеет свою собственную реализацию менеджера кучи, которая определена в системных модулях. Такое решение аргументируется инженерами Borland тем, что стандартный менеджер кучи Windows не обеспечивает достаточно эффективную работу с памятью. Конечно, как и любая Windows-программа, программа на Delphi имеет стандартную кучу по умолчанию, которую создает для нее система, однако функции New, Release, GetMem, FreeMem и некоторые другие оперируют с собственной реализацией менеджера куч. Менеджер кучи Delphi резервирует блоки адресного пространства размером 1 Мб, а выделяет блоки реальной памяти размером 16 Кб. Также вы можете написать и установить свою реализацию менеджера куч, если не доверяете ни инженерам Borland, ни инженерам Microsoft — для этого имеются все необходимые функции.

Хотя куча совершенно не предназначена для выделения больших участков памяти, запрос выделения большого участка у кучи не приведет к ошибке. Куча просто перенаправит ваш запрос операционной системе и вернет указатель на выделенный ею участок памяти.

4. Группы функций работы с памятью

В главе описываются группы базовых функций работы с памятью, которые доступны для программиста на Delphi. Включены описания как API-фукнций, так и Delphi-функций.

Фунции работают с менеджером кучи Delphi. Обеспечивают типизированное выделение и освобождение памяти. Используются для динамической работы со структурами.

Фунции работают с менеджером кучи Delphi. Обеспечивают нетипизированное выделение и освобождение памяти. Используются для динамической работы с небольшими бинарными блоками памяти (буфера, блоки).

Функции работы со стандартным менеджером кучи Windows. Используются для создания и уничтожения куч, выделения и освобождения большого количества нетипизированных блоков памяти малого размера. Функции позволяют работать со стандартной кучей по умолчанию, которую создает операционная система для каждого процесса.

LocalAlloc(), LocalFree(), . , GlobalAlloc(), GlobalFree(), .

Так как в Windows 32 нет разделения на глобальные и локальные кучи, эти две группы функций идентичны. Функции работают со стандартной кучей по умолчанию, которую создает операционная система для каждого процесса. Функции морально устарели и Microsoft не рекомендует их использовать без крайней необходимости. Однако эти функции могут пригодиться, например, при работе с буфером обмена.

«Основополагающие» функции выделения памяти в Windows. Используются как для резервирования адресного пространства, так и для выделения страниц реальной памяти в заранее зарезервированный участок адресного пространства. Позволяют выполнить обе фазы за один вызов функции. Используются для резервирования и выделения больших участков памяти.

5. Потоковые хранилища

Очень часто во многих программах встает проблема накопления потока поступающих данных. Например, это может быть запись звука, запись сигналов с датчиков, накопление данных с модема, коммуникационного порта, прием данных по сети и так далее. Если объем накапливаемых данных небольшой и заранее точно известен, то такая задача решается элементарно — под буфер выделяется блок памяти и эта память постепенно заполняется. Если же размер требуемого буфера достаточно большой, то выделение его полностью в самом начале может быть неэффективным — запись потока может прерваться гораздо раньше, а если же размер его неизвестен заранее, например когда запись данных останавливается по какому-либо внешнему сигналу, то встает проблема о выборе размера выделяемого блока.

В таких случаях используют динамические хранилища. В Delphi такими хранилищами являются динамические массивы, объект TMemoryStream, динамическое перераспределение памяти. Все эти хранилища работают на одном и том же принципе: под хранение данных выделяется блок памяти и поступающие данные последовательно записываются в этот блок, когда этот блок заполняется полностью, он перераспределяется с некоторым запасом (размер его увеличивается, а старые данные остаются). После того как каждый новый блок заполняется полностью он снова перераспределяется по мере поступления новых данных.

Перераспределение памяти занимает много ресурсов само по себе, а так как оно выполняется еще и в куче, то можно считать его вдвойне неэффективным, особенно если размеры перераспределяемых блоков становятся очень большими. Динамические массивы и динамическое перераспределение памяти используют менеджер кучи Delphi, а объект TMemoryStream использует стандартный менеджер кучи Windows.

Кроме того постоянное перераспределение участков памяти с разными размерами приводит к сильной дефрагментации памяти компьютера, что приводит к замедлению работы компьютера, а в конечном счете и к блокировке его работы.

Для решения проблемы накопления данных автором были разработаны два объекта накопления данных, основанные на двух разных принципах и имеющих разные характеристики.

Если размер буфера большой, но максимально возможный размер известен (например если есть ограничение на объем записываемых данных), то можно поступить следующим образом. В адресном пространстве процесса резервируется блок памяти необходимого размера, напомним, что такая операция не занимает ресурсов у системы. Затем по мере необходимости в этом зарезервированном участке памяти, по мере необходимости, последовательно выделяются страницы реальной памяти. Достоинством такого метода является линейное расположение ячеек в памяти друг за другом, то есть к такому хранилищу можно обращаться как к обычному линейному массиву. Недостатком — необходимость указания максимального размера.

Если размер буфера заранее неизвестен (ограничен лишь размером доступной реальной памяти), то предыдущее решение не подходит. В этом случае можно предложить другое решение. По мере необходимости, у системы можно запрашивать участки памяти одинакового размера и записывать в них поступающие данные. При этом буфер не будет иметь линейного адресного пространства, а будет состоять из одноразмерных «лоскутов» памяти — для вычислительного алгоритма такая организация буфера пожет стать серьезной помехой. Достоинством же такого решения является отсутствие необходимости изначально указывать какой либо размер буфера.

Если предполагается интенсивное увеличение-уменьшение хранилища, причем желательно, чтобы приращения были небольшими, то можно запрашивать память не у системы, а у стандартного менеджера кучи Windows, который создается для каждого хранилища отдельно. При этом, менеджер кучи выполняет роль кэша страниц памяти, увеличивая производительность.

Дополнительно, каждое хранилище имеет функции записи и чтения в стандартные потоки Delphi с упаковкой. Упаковка производится по стандартным алгоритмам библиотеки ZLIB.

6. Библиотека потоковых хранилищ

TBaseStorage — базовый класс

Оба хранилища, которые будут рассматриваться в дальнейшем, основаны на одном абстрактом базовом классе и имеют схожие свойства и методы.

Item[] — получение указателя на указанный элемент по его индексу.
ItemSize — запрос размера хранимого элемента. Count — запрос и установка числа хранимых элементов.

Clear — очистка хранилища, установление его размера в нуль.
AddItems, GetItems, SetItems — добавление, запрос и установка блока элементов. SaveStream, LoadStream — запись и загрузка хранилища в/из потока. Параметр Compression в этих процедурах означает следующее 0 — компрессия не производится, и хранилище записывается в линейном натуральном виде; 1 — наименьшая степень компрессии; 9 — наивысшая степень компрессии. Число между 1..9 — произвольная степень компрессии.

Линейное хранилище имеет линейное адресное пространство буфера, однако нуждается в указаниии максимальной емкости, пусть даже и очень большой.

Capacity — запрос и установка максимальной емкости хранилища. При установке емкости хранилища, все ранее хранимые данные теряются.


Memory — запрос указателя на линейный участок памяти, в котором хранятся данные, может быть использован в вычислительных алгоритмах.

Create — конструктор, в котором необходимо указать размер хранимого элемента.

Секционное хранилище хранит данные в кусочно-линейном буфере состоящем из участков одинакового размера. Хранилище не требует указания максимальной емкости, но взамен не позволяет обращаться к элементам как к массиву данных.

Block — список указателей на блоки, из которых состоит хранилище.
BlockSize — размер блоков, измеряемый в числе хранимых элементов.

Create — конструктор, в котором необходимо указать размер хранимого элемента в байтах и размер блока хранения.

7. Пример использования библиотеки потоковых хранилищ

Первый пример демонстрирует эффективность менеджера кучи Delphi перед стандатным менеджером кучи Windows. На компьютерах, которые были мне доступны, тест показывал более чем четырехкратное превосходство менеджера кучи Delphi над менеджером кучи Windows.

Следующий пример содержит исходные тексты библиотеки потоковых хранилищ и тест, сравнивающий два потоковых хранилища, а также объекты TMemoryStream и TFileStream. Тест содержит один параметр, который вы можете регулировать — число добавляемых объектов. Увеличивайте этот параметр вдвое при каждом запуске теста и наблюдайте за поведением всех четырех объектов, особенно объекта TMemoryStream. Пока массив данных помещается в оперативной памяти, результаты этого объекта будут прекрасными, однако после того как массив перестанет помещаться в ОЗУ, объект начинает резко сдавать свои позиции, а вскоре перестает работать совсем. Когда же он работает на пределе возможностей, он создает помехи при выделении памяти — именно из-за этого тест желательно перезапускать.

Вообще с объектом TMemoryStream связаны странные, необъяснимые истории. Как-то раз автор имел несчастье использовать этот объект в одной из своих программ для накопления потока данных с модема. Через некоторое время после запуска программа зависала сама и, кроме того, подвешивала Windows NT. Анализ с помощью диспетчера задач показал, что в процессе жизнедеятельности программы, она занимает все новые и новые участки памяти.

Поиск ошибок ни к чему ни привел, однако в конце концов пришлось обратить внимание на странности в поведении объекта TMemoryStream. Пришлось создать свой поток THeapStream путем формальной замены функций семейства Global. на функции GetMem, FreeMem, ReallocMem — то есть заменой стандартного менеджера кучи Windows на менеджер кучи Delphi. После этого все странности при работе программы исчезли.

Скорее всего это было связано с очень сильной дефрагментацией памяти, так как заполнение объекта TMemoryStream данными приводит к постоянному перераспределению участков памяти с разными размерами. От такой дефрагментации помогает только перезагрузка компьютера.

Copyright © 2004-2020 «Delphi Sources». Delphi World FAQ

Работа с памятью с помощью new и delete

Как известно, в языке С для динамического выделения и освобождения памяти используются фун­кции malloc() и free(). Вместе с тем С++ содержит два оператора, выполняющих выделение и освобождение памяти более эффективно и более просто. Этими операторами являются new и delete. Их общая форма имеет вид:

переменная_указатель = new тип_переменной;

Здесь переменная_указaтель является указателем типа тип_переменной. Оператор new выделяет память для хранения значения типа тип_переменной и возвращает ее адрес. С помощью new могут быть размещены любые типы данных. Оператор delete освобождает память, на которую указывает указатель переменная_указатель.

Если операция выделения памяти не может быть выполнена, то оператор new генерирует ис­ключение типа xalloc. Если программа не перехватит это исключение, тогда она будет снята с выполнения. Хотя для коротких программ такое поведение по умолчанию является удовлетвори­тельным, для реальных прикладных программ обычно требуется перехватить исключение и обра­ботать его соответствующим образом. Для того чтобы отследить это исключение, необходимо вклю­чить заголовочный файл except.h.

Оператор delete следует использовать только для указателей на память, выделенную с исполь­зованием оператора new. Использование оператора delete с другими типами адресов может по­родить серьезные проблемы.

Есть ряд преимуществ использования new перед использованием malloc(). Во-первых, оператор new автоматически вычисляет размер необходимой памяти. Нет необходимости в использовании оператора sizeof(). Более важно то, что он предотвращает случайное выделение неправильного количества памяти. Во-вторых, оператор new автоматически возвращает указатель требуемого типа, так что нет необходимости в использовании оператора преобразования типа. В-третьих, как ско­ро будет описано, имеется возможность инициализации объекта при использовании оператора new. И наконец, имеется возможность перегрузить оператор new и оператор delete глобально или по отношению к тому классу, который создается.

Ниже приведен простой пример использования операторов new и delete. Следует обратить вни­мание на использование блока try/catch для отслеживания ошибок выделения памяти.

#include
#include
int main()
<
int *p;
try <
p = new int; // выделение памяти для int
> catch (xalloc xa) <
cout
#include
int main()
<
int *p;
try <
p = new int (99); // инициализация 99-ю
> catch (xalloc xa) <
cout
#include
int main()
<
float *p;
int i;
try <
p = new float [10]; // получение десятого элемента массива
> catch(xalloc xa) <
cout

Работа с памятью

26.09.2010, 12:25

Работа с памятью
Переместить массив размерностью 16 ячеек из области памяти с начальным адресом 900 в область памяти.

Работа с памятью
Здравствуйте. Прошу скинуть любые примеры записи/чтения/редактирования данных из/в память. Заранее.

Работа с памятью
Всем добрый день. У меня появился такой вопрос: Предположим, есть такой код: AnotherObj.

Работа с памятью
Добрый день всем. Я только начал изучение C#(раньше работал c: C++ маленько — т.е. общее.

AForge и работа с памятью
Добрых времени суток. При использовании AForge для захвата картинки с вебкамеры память начинает.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL