The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск Nuitka 1.0, компилятора для языка Python "
Отправлено Аноним, 17-Авг-22 21:39 
> Открыл ресурс, тут же закрой его следующей строкой, а потом уже тайпай между строками гениальный код и нет "проблем"

А теперь представь себе, что ты работаешь с хеш-табличкой, в которой ключи и значения -- это строки. Тебе влетел ключ со значением, и тебе надо либо обновить пару ключ-значение в хеш-табличке, либо добавить её туда. При этом, ты не хочешь искать ключ в табличке дважды, и поэтому не вариант сначала проверить наличие ключа, а потом по условию либо обновить, либо добавить. И при этом, ты не хочешь почём зря создавать копии строк. Причём на вызывающей тебя стороне, может быть, уже выделили память под ключ, и отдали её тебе, и ты можешь отдать её хеш-табличке, если новую пару добавлять надо. Но в этом случае надо сделать free на такой ключ, если ключ уже есть в хештабличке. А может быть на вызывающей стороне ключ был создан в памяти на стеке, и в случае добавления нового ключа в хештабличку надо сделать strdup на этот ключ, а если ключ найдётся в хештабличке, то с этой памятью ничего делать не надо.

Со значение связываемым с ключом чуть проще, но есть свои нюансы. Если искомый ключ в хештабличке есть, то с ним связано значение, и это уже выделенная память, в которую можно скопировать новое значение, чтобы почём зря не выделять память. Но только если там достаточно памяти куда копировать. И не забыть сделать free. При этом, если тебе передано owned значение, то проще сделать free на старое значение, чем копировать.

Попробуй разрулить это своей банальной логикой. Попробуй сделать так, чтобы при любом раскладе обходится необходимым минимумом выделений/копирований памяти. Смотри не запутайся при этом в указателях, какой из них на стек, какой в кучу, а то нечаянно сделаешь free на память из стека, но в какой-нибудь из редко встречаемых ветвей, вот будет много радости пользователю, который напорется.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру