The OpenNET Project / Index page

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



"Выпуск Nuitka 1.0, компилятора для языка Python "
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Для сортировки сообщений в нити по дате нажмите "Сортировка по времени, UBB".
. "Выпуск Nuitka 1.0, компилятора для языка Python " +/
Сообщение от Аноним (-), 17-Авг-22, 21:39 
> Открыл ресурс, тут же закрой его следующей строкой, а потом уже тайпай между строками гениальный код и нет "проблем"

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Выпуск Nuitka 1.0, компилятора для языка Python , opennews, 17-Авг-22, 08:40  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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