void* buffer = NULL;
int size = 20000000;
buffer = malloc(size);
while(--size)((char*)buffer)[size]='g';
free(buffer);
return 0;
Утекает память
Утекает память и не могу понять как. Простенькое многопоточное приложение.
Используются критические секции и ждущие таймеры, нити. В одном функции
память из кучи выделяется в другой освобождается, тут все просто, и мне
кажется что работает правильно.
Необычность (нестандартность) ситуации заключается в следующем: Диспетчер
Задач показывает что процесс моей программы использует "нормальное" количество
памяти не больше не меньше. Но общее количество спользуемой памяти растет,
похоже его съедает система. После выгрузки моей программы количество
используемой памяти резко снижается (на 500 — 1000 Мб), хотя по показанием
того же Диспетчера задач мой процесс занимет 1,5 — 3 Мб.
Работа операциооной системы также сопровождается странностями: попытки запустить
приложения приводят к сообщению " У вас недостаточно прав" итд. После выгрузки моей
программы, странности исчезают.
Цитата:
Originally posted by Max Pechersky
Здравствуйте!
Утекает память и не могу понять как. Простенькое многопоточное приложение.
Используются критические секции и ждущие таймеры, нити. В одном функции
память из кучи выделяется в другой освобождается, тут все просто, и мне
кажется что работает правильно.
Необычность (нестандартность) ситуации заключается в следующем: Диспетчер
Задач показывает что процесс моей программы использует "нормальное" количество
памяти не больше не меньше. Но общее количество спользуемой памяти растет,
похоже его съедает система. После выгрузки моей программы количество
используемой памяти резко снижается (на 500 — 1000 Мб), хотя по показанием
того же Диспетчера задач мой процесс занимет 1,5 — 3 Мб.
Работа операциооной системы также сопровождается странностями: попытки запустить
приложения приводят к сообщению " У вас недостаточно прав" итд. После выгрузки моей
программы, странности исчезают.
Здравствуйте!
Утекает память и не могу понять как. Простенькое многопоточное приложение.
Используются критические секции и ждущие таймеры, нити. В одном функции
память из кучи выделяется в другой освобождается, тут все просто, и мне
кажется что работает правильно.
Необычность (нестандартность) ситуации заключается в следующем: Диспетчер
Задач показывает что процесс моей программы использует "нормальное" количество
памяти не больше не меньше. Но общее количество спользуемой памяти растет,
похоже его съедает система. После выгрузки моей программы количество
используемой памяти резко снижается (на 500 — 1000 Мб), хотя по показанием
того же Диспетчера задач мой процесс занимет 1,5 — 3 Мб.
Работа операциооной системы также сопровождается странностями: попытки запустить
приложения приводят к сообщению " У вас недостаточно прав" итд. После выгрузки моей
программы, странности исчезают.
Ну, было бы неплохо на исходник взглянуть... =) может де чего пропустил/неучел... мало ли... По поводу поведения винды (если ты под винду пишешь) при использовании всяких нитей, потоков Рихтер кое-чего раписал, советую почитать...
Цитата:
Originally posted by Max Pechersky
После выгрузки моей программы количество
используемой памяти резко снижается (на 500 — 1000 Мб), хотя по показанием того же Диспетчера задач мой процесс занимет 1,5 — 3 Мб.
Работа операциооной системы также сопровождается странностями: попытки запустить приложения приводят к сообщению " У вас недостаточно прав" итд. После выгрузки моей программы, странности исчезают.
После выгрузки моей программы количество
используемой памяти резко снижается (на 500 — 1000 Мб), хотя по показанием того же Диспетчера задач мой процесс занимет 1,5 — 3 Мб.
Работа операциооной системы также сопровождается странностями: попытки запустить приложения приводят к сообщению " У вас недостаточно прав" итд. После выгрузки моей программы, странности исчезают.
возможно где-то либо процессы порождают друг-друга безостановочно - просто заканчиваются системные ресурсы и винде становиться плохо
Цитата:
Originally posted by Max Pechersky
Здравствуйте!
Утекает память и не могу понять как. Простенькое многопоточное приложение.
Используются критические секции и ждущие таймеры, нити. В одном функции
память из кучи выделяется в другой освобождается, тут все просто, и мне
кажется что работает правильно.
Необычность (нестандартность) ситуации заключается в следующем: Диспетчер
Задач показывает что процесс моей программы использует "нормальное" количество
памяти не больше не меньше. Но общее количество спользуемой памяти растет,
похоже его съедает система. После выгрузки моей программы количество
используемой памяти резко снижается (на 500 — 1000 Мб), хотя по показанием
того же Диспетчера задач мой процесс занимет 1,5 — 3 Мб.
Работа операциооной системы также сопровождается странностями: попытки запустить
приложения приводят к сообщению " У вас недостаточно прав" итд. После выгрузки моей
программы, странности исчезают.
Здравствуйте!
Утекает память и не могу понять как. Простенькое многопоточное приложение.
Используются критические секции и ждущие таймеры, нити. В одном функции
память из кучи выделяется в другой освобождается, тут все просто, и мне
кажется что работает правильно.
Необычность (нестандартность) ситуации заключается в следующем: Диспетчер
Задач показывает что процесс моей программы использует "нормальное" количество
памяти не больше не меньше. Но общее количество спользуемой памяти растет,
похоже его съедает система. После выгрузки моей программы количество
используемой памяти резко снижается (на 500 — 1000 Мб), хотя по показанием
того же Диспетчера задач мой процесс занимет 1,5 — 3 Мб.
Работа операциооной системы также сопровождается странностями: попытки запустить
приложения приводят к сообщению " У вас недостаточно прав" итд. После выгрузки моей
программы, странности исчезают.
Для чего у тебя прога?
память выделяемая из хипа при помощи malloc (new) не возвращается системе, после free (delete). система сама забирает себе сколько нужно, при необходимости. реально память освобождается только по завершении программы. так, по крайней мере обстоит дело в UNIX, с его реализацией функций работы с хипом. судя по всему винда тоже делает нечто подобное.
Цитата:
Originally posted by squirL
память выделяемая из хипа при помощи malloc (new) не возвращается системе, после free (delete). система сама забирает себе сколько нужно, при необходимости. реально память освобождается только по завершении программы. так, по крайней мере обстоит дело в UNIX, с его реализацией функций работы с хипом. судя по всему винда тоже делает нечто подобное.
память выделяемая из хипа при помощи malloc (new) не возвращается системе, после free (delete). система сама забирает себе сколько нужно, при необходимости. реально память освобождается только по завершении программы. так, по крайней мере обстоит дело в UNIX, с его реализацией функций работы с хипом. судя по всему винда тоже делает нечто подобное.
Еще как возвращается.
Код:
поставь брейк на free и запусти диспетчер, после вызова free память возвращается системе до копейки.
до вызова 21 952 KB
после 2 400 KB
Цитата:
Originally posted by лАмер
Еще как возвращается.
поставь брейк на free и запусти диспетчер, после вызова free память возвращается системе до копейки.
до вызова 21 952 KB
после 2 400 KB
Еще как возвращается.
Код:
void* buffer = NULL;
int size = 20000000;
buffer = malloc(size);
while(--size)((char*)buffer)[size]='g';
free(buffer);
return 0;
int size = 20000000;
buffer = malloc(size);
while(--size)((char*)buffer)[size]='g';
free(buffer);
return 0;
поставь брейк на free и запусти диспетчер, после вызова free память возвращается системе до копейки.
до вызова 21 952 KB
после 2 400 KB
ОС какая?
Цитата:
Originally posted by squirL
ОС какая?
ОС какая?
XP Pro SP2