![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 16.01.2020
Сообщений: 3
|
![]()
Добрый день. Вопрос именно по Си (без ++) и именно для моей конкретной ситуации. Поэтому malloc/free не предлагать
![]() Собственно вопрос такой. Имеем в некоторой функции массив char s[100000]. Он в длительном цикле заполняется различными символами, потом эти символы заменяются на другие и т.д. много-много раз. Массив заполняется, в основном, с помощью strcat(s, "набор символов"). Если я правильно понимаю, то все символы, которыми я заполняю s, остаются где-то в памяти (даже после того, как я их уже "заменил" в массиве другими символами). Из-за этого размер памяти, используемой данной функцией, неуклонно увеличивается, пока она работает (за счет того, что больше не нужные символы накапливаются в памяти). Опять же, если я правильно понимаю, при выходе из данной функции память, занятая под все эти символьные константы, созданные ею, освобождается автоматически. Однако я хотел бы узнать, есть ли способ освобождать память от ненужных символьных констант еще в процессе работы самой этой функции? Заранее благодарю за конструктивные ответы. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,368
|
![]()
memmov(s + 10, s + 15, strlen(s + 15) + 1);
Удаляет все между 10 и 15 позицией. Если удалять надо всегда из начала массива, тогда читайте про ring buffer - будет гораздо эффективнее. |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 16.01.2020
Сообщений: 3
|
![]()
waleri, большое спасибо за наводку!
|
![]() |
![]() |
![]() |
#4 | |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,038
|
![]() Цитата:
Утечка памяти, скорее всего, при неправильной работе с пересозданием массива (если он динамический). Если же массив статический или созданный всего один раз динамический на определённый размер, то количество сожранной памяти не поменяется. Ну и да - либо циклический буфер, либо FIFO со сдвигом |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сортировка строковых литералов | FlipFan | Общие вопросы C/C++ | 0 | 20.11.2012 11:16 |
Удаление связного списка из памяти | Mahin | Общие вопросы C/C++ | 3 | 13.07.2012 10:10 |
Зацикливание при удаление памяти | coNsept | Общие вопросы C/C++ | 4 | 23.06.2012 18:00 |
выделение дин памяти и удаление | Nekesh | Общие вопросы C/C++ | 2 | 11.10.2010 13:30 |
Aлгоритм шифрования строковых литералов. | ATAMAN200 | Общие вопросы C/C++ | 2 | 24.09.2010 12:41 |