Size: a a a

RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.

2021 May 30

АК

Андрей Картошка... in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
Даже можно обойтись без этого
источник

АК

Андрей Картошка... in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
Сразу запрашивая session
источник

НИ

Николай Исипчук... in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
Таких языков как Go, много, я их называю D-подобными языками(по характеристике Runtime), они отличаются наличием автоматического управления памятью и используются для компиляции в нативный код, без использовании виртуальной машины или ее среды(Runtime). Это неплохие языки программирования, позволяют новичкам быстро научиться программировать не часто наступая на грабли. Но все использование автоматического управления памятью создает некоторые проблемы в больших и сложных приложениях. Это падение производительности и отчасти увеличение потребления памяти. Особенно если скажем при отрисовке кадра на экране(или на окне) создаются множество объектов и естественно это приведет к тому, что каждую секунду сборщик мусора будет вынужден обрабатывать тысячи объектов.   Пример - тот же Flutter/Dart, там обычный учебный пример программы работает с увеличением потребляемой памяти примерно 4 килобайта, при этом программа ничего не делает, только обрабатывает перемещения указателя мышки и отрисовывает окно приложения. Потом это потребление останавливается у некоторого лимита(на самом деле нет - оно пляшет в ту и другую сторону). И с этим ничего не поделать, так устроенны такие ЯП.  По этому в некоторой степени повышается потребления питания и некоторое увеличение нагрузки на процессор, в мобильных приложениях и на слабых устройствах это существенно. Для того чтобы исправить это, нужно выделять временные объекты на стеке, а не на куче. Можно разве что оптимизировать так, чтобы во время отрисовки экрана(или обработки события) не создавались временные объекты, или почти не создавались.  Для каждого метода можно добавить свои поля, которые используется в горячих временных объектах или реализовать свой стек объектов, которые используются как временные. Но это рецепт не работает для неизменяемых объектов.
Поэтому такие ЯП не являются полноценной заменой C/C++.
Я перечислю такие языки(которые я называю D-подобными): D, Objective-C, Go, Nim, Vala, V, Dart, Swift,Crystal и есть еще много других. Сюда же можно отнести и Haxe, даже при транспиляции в C++ там есть сборщик мусора.
Из этих языков можно выделить по признаку близости к C, позволяя легко импортировать функции, написанные на C: D, Objective-C, Nim, Vala.
Но если вы хотите программировать на Go в области прикладного программирования, тогда я лучше посоветую использовать Nim.
Я же сам предпочитаю использовать (из перечисленных языков) Vala, это отличный язык программирования, синтаксис  похож на Java и C#, и объекты можно выделять вручную и даже на стеке(зависит от объявления типа), но это малопопулярный язык программирования. Единственный значительный минус Vala - отсутствие перезагрузки функций и методов, это из-за близости к языку C(точнее из-за прозрачного взаимодействия с кодом на C и именования экспортируемых из скомпилированных бинарников функций  стиля C).
источник

DP

Defragmented Panda in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
выделение памяти на стеке это как?

чем от кучи отличается?
источник

НИ

Николай Исипчук... in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
Что касается Rust, это революционный и весьма популярный современный язык программирования, со сложной концепцией управления. Это единственный полноценный конкурент C++, я рекомендую его использовать. Но это весьма сложной язык, сложная концепция и значительное использование метасимволов. Для новичков, которые не знают ни одного языка со статической типизацией будет сложно его изучать и это не быстро дается.
Но все же я считаю, есть смысл переходить с С++ на Rust. С C++ возникает много проблем, которых никак не решить новыми стандартами языка, очень легко наступить на грабли, и могут быть весьма большие затраты времени на исправление даже небольшой ошибки.
источник

НИ

Николай Исипчук... in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
Выделение на стеке - объект создается из текущего указателя стека. Например (на C++), скажем при компиляции функции или метода было определено, что локальный объект struct stat statOfFile располагается со смещением 240 относительно текущего указателя стека, так определено компилятором и так будет использоваться структура по данному адресу. При этом искать свободный участок памяти не нужно. При этом предполагается, что стек имеет необходимый свободный размер памяти. Нулевые затраты производительности на создание и уничтожение таких объектов.
На куче - это нужно не просто еще найти свободный участок памяти, но еще и пометить, что менеджер памяти намерен его использовать. Но еще и нужно обслуживать такой объект, контролировать если нужен объект, если не нужен - удалять.
источник

DP

Defragmented Panda in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
и как предлагается действовать когда большой обьект уже не нужен, его место "в стеке" свободно, и можно выделить под другую структуру? или просто забить на переиспользованпе памяти?
источник

НИ

Николай Исипчук... in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
Указатель стека плавает при попадании в функцию и выходе из функции. Грубо говоря указатель стека возвращается в то значение, которое было до вызова функции. Потому освобождается память выделенная под локальные переменные
источник

DP

Defragmented Panda in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
в тривиальных случаях.

А ближе к реальным: вот есть у нас 100 структур, мы случайно удаляем и создаем новые. Если из стека из середины удалить что-то - половину стека переписываем? просто запрещать обращаться к чему-то кроме начала стека? ни то ни другое не адекватно сегодня.
источник

НИ

Николай Исипчук... in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
Разные потоки используют свой отдельный стек. Если это вопрос о многопоточности.
В пределах одного потока это работает как надо. При попадание в функцию, указатель стека понижается(уменьшается) на количество памяти, необходимое на локальные переменные, объявленные в теле функции. Если же функция здесь же рекурсивно вызывается, тогда опять понижается указатель стека, и каждый кадр вызова функции управляет своими данными.
источник

НИ

Николай Исипчук... in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
При выходе из функции - указатель стека повышается на тоже значение. При выходе из всех всех функци, указатель стека указывает на самую вершину стека
источник

НИ

Николай Исипчук... in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
Еще есть возможность использование функции alloca, если компилятор поддерживает, тогда да, можно случайным образом случайного размера объекты, как бы на стеке.
источник

НИ

Николай Исипчук... in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
Если такой функции же нету, можно реализовать выделение случайным образом случайного размера объекты при помощи рекурсии, если это вам нужно.
источник

НИ

Николай Исипчук... in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
А так обычно локальные переменные, выделяемые на стеке, имеют постоянный и предсказуемый размер.
источник

K

Kotikstar in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
Добрый день
источник

K

Kotikstar in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
Переслано от Kotikstar
129$MPFW.CWE4CF4Z+APTANB8OA83Q5%VDWE40F42ZAEYA3Q59KCWE41A66:63Q5*/EWE4/96PF6TW6QF6%96Z47JF6YF4ZQEWE4/96OF6HA73:6%96Z47JF60G4WE4WF49G4.GJ0YRF$5*-SE-7Q7CDHO9WOLNT334:YLU/DH+GDEHRB9SG1*Y0GSLQ96%JPKS0W7AQJSH F:190CHE+O:KJ:*L--VK*LZ2N6L0BHL0QQSE46HR%J24TSTC06+J%QBE5M.U0WLF X70L4X24TWT$ TL9DPRKJS7Z*FM9E7NB3$VOWM$*HM5NW/CNTLEAM422ZSM:TDRRPYDRD%N HEPIII 2UQJH3R07K4+62Z3FDTJHEM2AG1TUB8ULNZCMRCE:%1-U1GOMC5NNNK1$0/6TPZ6POI0CLLUL*MV+ZOQMUIIU0*N 3F1FQDES 886%T9.0B96B74SLT+4ALGS946897B*CH313QRQN1BPEP+OB6LM-036KKVA446U00BOFM0G
источник

K

Kotikstar in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
Переслано от Kotikstar
Какой это шифр/хэш?
источник

DP

Defragmented Panda in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
я понимаю как работает стек если работать только с его вершиной.

Это никак не помогает мне понять что предлагается делать вне форт-идеологии. Допустим типичная ситуация сегодня - 100 обьектов в памяти и функция обходит этот набор обьектов и удаляет один из обьектов по какой-то логике. Обьекты разных размеров. Повторить много раз подобное.

Единственное решение через стек - переписать около половины обьектов в памяти.
источник

DP

Defragmented Panda in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
А это в итоге делает ту же кучу.
источник

НИ

Николай Исипчук... in RU.CRYPTOGRAPHY — Криптография, алгоритмы, шифрование.
Если объекты удаляются в отличном от обратного порядка создания, тогда можно использовать ручное управление памятью(malloc, free/new, delete). Использовать кучу не обязательно.
Если же объекты удаляются в обратном порядке(или же одновременно), тогда можно использовать стек.
источник