Re: Менеджеры памяти
От: remark Россия http://www.1024cores.net/
Дата: 20.01.08 12:43
Оценка: 25 (5)
Здравствуйте, 8bit, Вы писали:

8>Подскажите, какие есть эффективные быстрые менеджеры памяти (С/С++)?

8>Знаю про SmartHeap от microquill и про Doug Lea's malloc.
8>Может кто своей реализацией поделится ?


Смотря что тебе нужно. Варианта 2 — либо аллокатор общего назначения как drop-in замена стандартному, что бы просто ускорить работу/уменьшить фрагментацию, либо аллокатор под какую-то конкрутную ситуацию.

В первом варианте так же возможны вариации — без поддержки многопоточности вообще, с базовой поддержкой, либо с эффективной поддержкой многопоточности.

Из стандартных можно посмотреть на:
hoard
http://www.hoard.org/

jemalloc
http://people.freebsd.org/~jasone/jemalloc/bsdcan2006/BSDcan2006_slides.pdf
http://people.freebsd.org/~jasone/jemalloc/bsdcan2006/jemalloc.pdf

dlmalloc
http://gee.cs.oswego.edu/dl/html/malloc.html

ptmalloc
http://www.malloc.de/en/index.html

TBB
http://threadingbuildingblocks.org/


Если тебе нужен аллокатор под конкретную ситуацию (тут я имею в виду в основном, что надо выделять блоки фиксированного размера под объекты одного типа), то тут нельзя сравниться с headerless fixed-size аллокаторами. Во-первых, они headerless, т.е. сами не используют дополнительную память на единицу выделения, т.е. из блока 4кб такой аллокатор может выделить ровно 1кб блоков по 4 байта. Во-вторых, они могут выделять память только одного размера, а как следствие нулевая фрагментация и любое выделение/освобождение это O(1).
Основная идея изложена в FixedAllocator в библиотеке Loki:
http://loki-lib.sourceforge.net/
(только поддержка многопоточности там хромает)


Если нужна эффективная поддержка многопоточности, то смотри здесь:
http://www.rsdn.ru/Forum/message/2791305.aspx
Автор: 8bit
Дата: 10.01.08

http://www.rsdn.ru/Forum/message/2791305.aspx
Автор: 8bit
Дата: 10.01.08

http://www.rsdn.ru/Forum/message/2791305.aspx
Автор: 8bit
Дата: 10.01.08


Так же можно поглядеть streamflow:
http://people.cs.vt.edu/~scschnei/streamflow/
http://people.cs.vt.edu/~scschnei/papers/ismm06.pdf


Под конкрутную ситуацию может быть построен очень эффективный аллокатор. Вот например идея моего аллоктора для паттерна producer-consumer:
http://groups.google.com/group/comp.programming.threads/browse_frm/thread/378a35b21ae2b42e



1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: Менеджеры памяти
От: Vain Россия google.ru
Дата: 11.01.08 20:04
Оценка: 23 (3)
Здравствуйте, Cyberax, Вы писали:

8>>Подскажите, какие есть эффективные быстрые менеджеры памяти (С/С++)?

8>>Знаю про SmartHeap от microquill и про Doug Lea's malloc.
C>Для параллельных систем рулит Hoard — http://www.hoard.org/
nedmalloc

nedmalloc is a VERY fast, VERY scalable, multithreaded memory allocator with little memory fragmentation. It is faster in real world code than Hoard, faster than tcmalloc, faster than ptmalloc2 and it scales with extra processing cores better than Hoard, better than tcmalloc and better than ptmalloc2 or ptmalloc3. Put another way, there is no faster portable memory allocator out there! Unlike other allocators, it is written in C and so can be used anywhere and it also comes under the Boost software license which permits commercial usage.

[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: Менеджеры памяти
От: Xentrax Россия http://www.lanovets.ru
Дата: 12.01.08 18:35
Оценка: 19 (2)
Здравствуйте, 8bit, Вы писали:


8>Подскажите, какие есть эффективные быстрые менеджеры памяти (С/С++)?

8>Знаю про SmartHeap от microquill и про Doug Lea's malloc.

DougLee неплох. Единственное, что у него баг в спин-блокировке, там вызывается Sleep(0), и если память выделяют потоки с разынми приоритетами на 1-процессорной машине, то иногда все зависает.
Ядро NT с этим разбирается, а вот операционка Windows CE зависала намертво вся (один из потоков в программе был с повышенным приоритетом).
Re[4]: Менеджеры памяти
От: remark Россия http://www.1024cores.net/
Дата: 20.01.08 12:52
Оценка: 13 (2)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Vain, Вы писали:


А>Подскажите пожалуйста позволит ли Thread malloc или nedmalloc бороться с фрагментацией памяти? Вообще оправданно ли использование менеджера памяти для борьбы с фрагментацией памяти или проще хранить данные в статических массивах? В моем случаи макимум требуеться 10-12mb памяти.



Полностью оправдано. В идеале прикладной программист вообще не должен знать, что такое фрагментация.
Вообще странно, что при требовании 10-12mb памяти удаётся исчерпать всю память с помощью фрагментации... больше похоже на утечку памяти... Попробуй подампить хип, что бы увидеть, что у тебя не утекают объекты. Например можно каждый час писать в лог кол-во выделенных, но не освобожденных объектов. Если ты увидишь последовательность типа: 1000, 950, 1050, 1000, то всё нормально, а если 1000, 2000, 3000, 4000, то проблема не в фрагментации.

Если проблема не в утечке, а именно в фрагментации, то не забываем, что в стандартном хипе Win32 есть т.н. Low-fragmentation Heap:
http://msdn2.microsoft.com/en-us/library/aa366750.aspx
которую можно включить с помощью функции HeapSetInformation()


А>Текущая реализация использует malloc/free память выделяеться блоками по 64/512-1024 байт, но выделяеться и отдаеться очень активно. В результате примерно через 5 дней непрерывной работы появляеться ошибка что невозможно выделить память. После рестарта виндовс все работает нормально.



В такой ситуации следует очень пристально поглядеть на headerless fixed-size аллокаторы памяти. Они имеют нулевую внутреннюю фрагментацию и оооочень быстрые. Например, ты можешь создать под такому аллокатору для размеров 64 и 1024 байта на каждый поток.



1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: Менеджеры памяти
От: Phoenics Россия https://sourceforge.net/projects/phengine
Дата: 10.01.08 14:34
Оценка: 12 (1)
Здравствуйте, 8bit, Вы писали:


8>Подскажите, какие есть эффективные быстрые менеджеры памяти (С/С++)?

8>Знаю про SmartHeap от microquill и про Doug Lea's malloc.

8>Может кто своей реализацией поделится ?


Ещё есть QuickHeap, в одном из опубликованных номеров RSDN журнала есть статья с кодом объясняющим как он работает.
Када-то писал свой пул памяти, и он даже неплохо и довольно быстро работал, но сейчас уже не найду код.
---=== С наилучшими пожеланиями, Phoenics ===---
_
Re: Менеджеры памяти
От: Cyberax Марс  
Дата: 10.01.08 17:33
Оценка: 12 (1)
Здравствуйте, 8bit, Вы писали:

8>Подскажите, какие есть эффективные быстрые менеджеры памяти (С/С++)?

8>Знаю про SmartHeap от microquill и про Doug Lea's malloc.
Для параллельных систем рулит Hoard — http://www.hoard.org/
Sapienti sat!
Re: Менеджеры памяти
От: Vain Россия google.ru
Дата: 10.01.08 19:05
Оценка: 12 (1)
Здравствуйте, 8bit, Вы писали:

8>Подскажите, какие есть эффективные быстрые менеджеры памяти (С/С++)?

8>Знаю про SmartHeap от microquill и про Doug Lea's malloc.

на sourceforge
Thread malloc
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[4]: Менеджеры памяти
От: Phoenics Россия https://sourceforge.net/projects/phengine
Дата: 14.01.08 10:35
Оценка: 12 (1)
Здравствуйте, 8bit, Вы писали:

8>Здравствуйте, Phoenics, Вы писали:


P>>Если топикастеру интересно, я могу набросать схему классов своего менеджера и описать как он работал, т.к. примерно помню его устройство


8>Да, если не затруднит.


Схема visio здесь: http://files.rsdn.ru/59213/MemoryManager.rar
Там присутсвует статическая модель(почти для всех классом, их методов и членов добавлены комантарии и примечания, поясняющие что это, зачем это нужно и иногда даже как примерно работает) и сиквенс модель где представлен примерный процесс выделения памяти.
Хочется ещё раз напонимать что это сильно примерный набросок сделанный попамяти, так что за ляпы присуствие которых я вполне допускаю ногами чур не бить В статической модели приведены только наиболее важные методы и члены позволяющие понять общий приницп работы, всякую мишуру тащить не стал.
---=== С наилучшими пожеланиями, Phoenics ===---
_
Re: Менеджеры памяти
От: koder.spb.ru http://koder-spb.wikispaces.com/
Дата: 01.02.08 12:12
Оценка: 12 (1)
Здравствуйте, 8bit, Вы писали:


8>Подскажите, какие есть эффективные быстрые менеджеры памяти (С/С++)?

8>Знаю про SmartHeap от microquill и про Doug Lea's malloc.

8>Может кто своей реализацией поделится ?


Моя реализация
http://koder.spb.ru/index.php?fix=4
http://koder-spb.wikispaces.com/
Re[4]: Менеджеры памяти
От: trophim Россия  
Дата: 15.01.08 19:08
Оценка: :)
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Vain, Вы писали:


А>Подскажите пожалуйста позволит ли Thread malloc или nedmalloc бороться с фрагментацией памяти? Вообще оправданно ли использование менеджера памяти для борьбы с фрагментацией памяти или проще хранить данные в статических массивах? В моем случаи макимум требуеться 10-12mb памяти.


А>Текущая реализация использует malloc/free память выделяеться блоками по 64/512-1024 байт, но выделяеться и отдаеться очень активно. В результате примерно через 5 дней непрерывной работы появляеться ошибка что невозможно выделить память. После рестарта виндовс все работает нормально.


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

Я хочу увидеть логику возникновения постоянно возрастающего числа 'дырок' в памяти, которые собственно и приведут к фрагментации и исчерпанию памяти. А то сам я что-то не могу придумать такого сценария...
[EOF]
Let it be! — Давайте есть пчелу!
Re[4]: Менеджеры памяти
От: alsemm Россия  
Дата: 21.01.08 12:25
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Vain, Вы писали:


А>Подскажите пожалуйста позволит ли Thread malloc или nedmalloc бороться с фрагментацией памяти? Вообще оправданно ли использование менеджера памяти для борьбы с фрагментацией памяти или проще хранить данные в статических массивах? В моем случаи макимум требуеться 10-12mb памяти.

Я правильно понимаю, что у вас серверное приложение? Клиенты через сеть к нему ходят и оно через 5 дней начинает помирать. Так? Я бы написал эмулятор клиента какой-нибудь простецкий, чтобы он загружал сервер под завязку работой, это, возможно, сократит время наработки на отказ с 5 дней до чего-то разумного. Еще бы сделал логирование всех запросов эмулятора к серверу чтобы можно было воспроизвести последовательность действий которая сервер убивает. А потом бы уже вскяие аллокаторы стал пробовать.

Алексей
Менеджеры памяти
От: 8bit  
Дата: 10.01.08 13:40
Оценка:
Подскажите, какие есть эффективные быстрые менеджеры памяти (С/С++)?
Знаю про SmartHeap от microquill и про Doug Lea's malloc.

Может кто своей реализацией поделится ?


18.01.08 01:32: Перенесено модератором из 'Средства разработки' — Хитрик Денис
Re[2]: Менеджеры памяти
От: Phoenics Россия https://sourceforge.net/projects/phengine
Дата: 11.01.08 14:17
Оценка:
Здравствуйте, Phoenics, Вы писали:

8>>Может кто своей реализацией поделится ?


P>Ещё есть QuickHeap, в одном из опубликованных номеров RSDN журнала есть статья с кодом объясняющим как он работает.

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

Если топикастеру интересно, я могу набросать схему классов своего менеджера и описать как он работал, т.к. примерно помню его устройство
---=== С наилучшими пожеланиями, Phoenics ===---
_
Re[3]: Менеджеры памяти
От: 8bit  
Дата: 11.01.08 14:57
Оценка:
Здравствуйте, Phoenics, Вы писали:

P>Если топикастеру интересно, я могу набросать схему классов своего менеджера и описать как он работал, т.к. примерно помню его устройство


Да, если не затруднит.
Re[3]: Менеджеры памяти
От: Аноним  
Дата: 12.01.08 09:53
Оценка:
Здравствуйте, Vain, Вы писали:

Подскажите пожалуйста позволит ли Thread malloc или nedmalloc бороться с фрагментацией памяти? Вообще оправданно ли использование менеджера памяти для борьбы с фрагментацией памяти или проще хранить данные в статических массивах? В моем случаи макимум требуеться 10-12mb памяти.

Текущая реализация использует malloc/free память выделяеться блоками по 64/512-1024 байт, но выделяеться и отдаеться очень активно. В результате примерно через 5 дней непрерывной работы появляеться ошибка что невозможно выделить память. После рестарта виндовс все работает нормально.
Re[4]: Менеджеры памяти
От: Vain Россия google.ru
Дата: 12.01.08 10:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Vain, Вы писали:


А>Подскажите пожалуйста позволит ли Thread malloc или nedmalloc бороться с фрагментацией памяти? Вообще оправданно ли использование менеджера памяти для борьбы с фрагментацией памяти или проще хранить данные в статических массивах? В моем случаи макимум требуеться 10-12mb памяти.

Что значит "хранить данные в статических массивах"?

А>Текущая реализация использует malloc/free память выделяеться блоками по 64/512-1024 байт, но выделяеться и отдаеться очень активно. В результате примерно через 5 дней непрерывной работы появляеться ошибка что невозможно выделить память. После рестарта виндовс все работает нормально.

Это у вас наверно что-то с ликами, а может и с таймером, здесь трудно гадать.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[5]: Менеджеры памяти
От: Аноним  
Дата: 12.01.08 11:08
Оценка:
Здравствуйте, Vain, Вы писали:

V>Что значит "хранить данные в статических массивах"?

использовать автоматичские переменные или выделить один раз 12mb и размещать в этом блоке памяти свои переменные (у меня список который все время перестраиваеться поэтому множество постоянных вызовов malloc/free).

V>Это у вас наверно что-то с ликами, а может и с таймером, здесь трудно гадать.


скажите пожалуйста что может быть с таймером ?

память скорей всего не течет так как проверял N раз код сам и еще проверял утечки средствами vs и memwatch
Re[6]: Менеджеры памяти
От: Vain Россия google.ru
Дата: 12.01.08 17:41
Оценка:
Здравствуйте, Аноним, Вы писали:

V>>Что значит "хранить данные в статических массивах"?

А>использовать автоматичские переменные или выделить один раз 12mb и размещать в этом блоке памяти свои переменные (у меня список который все время перестраиваеться поэтому множество постоянных вызовов malloc/free).
Конечно выделить раз непрерывный кусок в хипе, благо сегодня 12мб не 12гб.

V>>Это у вас наверно что-то с ликами, а может и с таймером, здесь трудно гадать.

А>скажите пожалуйста что может быть с таймером ?
Ну если где-то арифметика из float'а в int округляется криво. Да тут можно гадать сколько угодно!
А>память скорей всего не течет так как проверял N раз код сам и еще проверял утечки средствами vs и memwatch
Трудно здесь что-то сказать, можно посоветовать заменить функции выделения памяти и посмотреть лики какими нибудь другими средствами.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[5]: Менеджеры памяти
От: Аноним  
Дата: 15.01.08 20:33
Оценка:
Здравствуйте, trophim, Вы писали:

T>Я хочу увидеть логику возникновения постоянно возрастающего числа 'дырок' в памяти, которые собственно и приведут к фрагментации и исчерпанию памяти. А то сам я что-то не могу придумать такого сценария...


В моем случаи есть N списков размер каждого элемента списка 64/512-1024 байт
В минуту создаеться и удаляеться M элементов списка M минимум 200 максимум 3-4 тысячи.

После 5 суток работы в логах появляються сообщения что не возможно выделить память.
После перезагрузки все нормально.
На 98% уверен что память не течет так как проверял код много раз именно на мемору лиик.
Re[5]: Менеджеры памяти
От: Аноним  
Дата: 15.01.08 20:50
Оценка:
Здравствуйте, trophim, Вы писали:

T>Я хочу увидеть логику возникновения постоянно возрастающего числа 'дырок' в памяти, которые собственно и приведут к фрагментации и исчерпанию памяти. А то сам я что-то не могу придумать такого сценария...


Еще уточнения
максимум мне требуеться 10-12mb но это теоретически в практики я не видел что бы списки были более 3mb в моем приложении.
у себя на PC оставлял на 3 суток (выходные добиться эфекта не смог) даже если добюсь что я могу сделать ?
Re[6]: Менеджеры памяти
От: Phoenics Россия https://sourceforge.net/projects/phengine
Дата: 16.01.08 05:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, trophim, Вы писали:


T>>Я хочу увидеть логику возникновения постоянно возрастающего числа 'дырок' в памяти, которые собственно и приведут к фрагментации и исчерпанию памяти. А то сам я что-то не могу придумать такого сценария...


А>Еще уточнения

А>максимум мне требуеться 10-12mb но это теоретически в практики я не видел что бы списки были более 3mb в моем приложении.
А>у себя на PC оставлял на 3 суток (выходные добиться эфекта не смог) даже если добюсь что я могу сделать ?

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

Ещё можно попробовать добавить в используемый менеджер функцию логгирования которая будет сбрасывать на диск дамп в примерно таком виде:
1. адрес1-адрес2 РазмерБлока1 Занят/свободен
2. адрес3-адрес4 РазмерБлока2 Занят/свободен
3. ...
на основе такого отчёта можно было бы судить о том насколько сильно фрагментирована память...
---=== С наилучшими пожеланиями, Phoenics ===---
_
Re[7]: Менеджеры памяти
От: Аноним  
Дата: 16.01.08 08:22
Оценка:
Здравствуйте, Phoenics, Вы писали:

P>Ещё можно попробовать добавить в используемый менеджер функцию логгирования которая будет сбрасывать на диск дамп в примерно таком виде:

P>1. адрес1-адрес2 РазмерБлока1 Занят/свободен
P>2. адрес3-адрес4 РазмерБлока2 Занят/свободен
P>3. ...
P>на основе такого отчёта можно было бы судить о том насколько сильно фрагментирована память...

Спасибо за идею.
Я могу сбрасывать такой дам при обработки ошибки выделения памяти у клиента.
Re[6]: Менеджеры памяти
От: Tonal- Россия www.promsoft.ru
Дата: 16.01.08 17:57
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, trophim, Вы писали:


T>>Я хочу увидеть логику возникновения постоянно возрастающего числа 'дырок' в памяти, которые собственно и приведут к фрагментации и исчерпанию памяти. А то сам я что-то не могу придумать такого сценария...


А>В моем случаи есть N списков размер каждого элемента списка 64/512-1024 байт

А>В минуту создаеться и удаляеться M элементов списка M минимум 200 максимум 3-4 тысячи.
Можно элементы сгруппировать по размерам и для каздого размера завести свой менеджер памяти. Ну а менеджеры пусть выделяют блоки одинакового размера. Тогда каждый менеджер всегда будут работать с блоками одинакового размера и дефрагментации не будет.
Правда существует вероятность перерасхода памяти ввиду очень неплотного заполнения, но это в принципе можно свести к минимуму каким-нибудь хитрым алгоритмом выделения объектов на используемых блоках (например выделять объекты на наиболее заполненных блоках).
... << RSDN@Home 1.2.0 alpha rev. 787>>
Re[8]: Менеджеры памяти
От: trophim Россия  
Дата: 16.01.08 19:51
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Phoenics, Вы писали:


P>>Ещё можно попробовать добавить в используемый менеджер функцию логгирования которая будет сбрасывать на диск дамп в примерно таком виде:

P>>1. адрес1-адрес2 РазмерБлока1 Занят/свободен
P>>2. адрес3-адрес4 РазмерБлока2 Занят/свободен
P>>3. ...
P>>на основе такого отчёта можно было бы судить о том насколько сильно фрагментирована память...

А>Спасибо за идею.

А>Я могу сбрасывать такой дам при обработки ошибки выделения памяти у клиента.

И все же хоть убейте, не могу понять, как можно достичь фрагментации памяти, если выделять надо 10-12Мб. Менеджер что, не объединяет соседние пустые блоки??? Тут два варианта: либо утечка памяти, либо какой-то странный алгоритм работы менеджера памяти.

З.Ы. Может все же кто-то раскажет, каким же образом можно достичь фрагментации памяти, которая приведет к ее исчерпанию?
[EOF]
Let it be! — Давайте есть пчелу!
Re[7]: Менеджеры памяти
От: Аноним  
Дата: 17.01.08 11:18
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Правда существует вероятность перерасхода памяти ввиду очень неплотного заполнения, но это в принципе можно свести к минимуму каким-нибудь хитрым алгоритмом выделения объектов на используемых блоках (например выделять объекты на наиболее заполненных блоках).


Спасибо за идею буду пробовать.
Я видел у аналога (и это работает) выделяют один раз память и используют не списки а массивы.
Re[6]: Менеджеры памяти
От: Sergey Россия  
Дата: 17.01.08 11:50
Оценка:
> T>Я хочу увидеть логику возникновения постоянно возрастающего числа 'дырок' в памяти, которые собственно и приведут к фрагментации и исчерпанию памяти. А то сам я что-то не могу придумать такого сценария...
>
> В моем случаи есть N списков размер каждого элемента списка 64/512-1024 байт
> В минуту создаеться и удаляеться M элементов списка M минимум 200 максимум 3-4 тысячи.
>
> После 5 суток работы в логах появляються сообщения что не возможно выделить память.
> После перезагрузки все нормально.
> На 98% уверен что память не течет так как проверял код много раз именно на мемору лиик.

Под XP проблему можно решить, простым вызовом HeapSetInformation переключившись на использование low-fragmentation heap.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[6]: Менеджеры памяти
От: 8bit  
Дата: 17.01.08 14:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>После 5 суток работы в логах появляються сообщения что не возможно выделить память.

А>После перезагрузки все нормально.
А>На 98% уверен что память не течет так как проверял код много раз именно на мемору лиик.

А сколько не может выделить памяти проверяли?

Вот, кстати, топик с похожей проблемой.
http://www.rsdn.ru/forum/message/2489003.1.aspx
Автор: MikelSV
Дата: 16.05.07
Re[7]: Менеджеры памяти
От: Аноним  
Дата: 17.01.08 19:41
Оценка:
Здравствуйте, 8bit, Вы писали:

8>А сколько не может выделить памяти проверяли?

512 байт мне из логов только номер строки где была ошибка известно.

8>Вот, кстати, топик с похожей проблемой.

8>http://www.rsdn.ru/forum/message/2489003.1.aspx
Автор: MikelSV
Дата: 16.05.07


Большое спасибо за ссылку
я тоже сидел на vs6, сейчас тестирую на vs2005 sp1
моя программа активно использует — memset, memcpy, sprintf, вычисление указателей и strcpy

еще хочу добавить что strtok зло
если есть необходимость лучше сразу писать свой аналог strtok
Re[5]: Менеджеры памяти
От: Аноним  
Дата: 23.01.08 13:28
Оценка:
Здравствуйте, alsemm, Вы писали:

A>Я правильно понимаю, что у вас серверное приложение? Клиенты через сеть к нему ходят и оно через 5 дней начинает помирать. Так? Я бы написал эмулятор клиента какой-нибудь


приложение серверное
тестируем создавая нагрузку эквивалентную нескольким неделям работы
логировать у клиента не возможно так как: что предшествует ошибки не известно а если логировать все то места на диски не хватит/клиент не согласиться (у них более миллиона обращений в сутки а каждое обращение даст в логи строк 200)

в любом случаи спасибо за идею
в лог можно писать не нормальное сообщение а только номер строки которая отработала
можно подменить malloc/free на свои и если они отработали с ошибкой сохранять доп информацию
задумался какие части когда вызываються часто но не когда идет обращение клиента (возможно проблемма в них так как под имитацией нагрузки они не тестируються а вызываються с некоторой эпизодичностью)
Re[2]: А есть такой?
От: 8bit  
Дата: 23.05.08 09:56
Оценка:
Что бы менеджер памяти работал на "файле".
Имеем файл, например 100 мб, и по сути он "пул" памяти на 100мб.
При нехватке, "пул" можно увеличить, или уменьшить при избытке.

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.