Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2

Добавление/Освобождение памяти

19.09.2023, 02:43. Показов 1884. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли добавить памяти блоку "на месте" не копируя, или освободить часть памяти блока?
Берем такой код
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub testMem()
    Dim arr%()
    ReDim arr(0)
    arr(0) = 2
    Debug.Print VarPtr(arr(0))
    ReDim Preserve arr(3)
    Debug.Print VarPtr(arr(0))
    ReDim Preserve arr(1)
    Debug.Print VarPtr(arr(0))
End Sub
Значение каждый раз меняется. Я могу сократить размер так (также можно делать со строкой) и это не вызывает ошибки, вопрос, законно ли это и не остается ли в памяти не освобожденный участок после завершения процедуры?
Visual Basic
1
CopyMemory ByVal GetSA(ArrPtr(arr)) + 16, 2&, 4
Ну и вопрос с добавлением. Чисто гипотетически, я сравниваю это с дописыванием текстового файла на жестком диске, верно такое сравнение по отношению к ОЗУ? Возможно ли вообще средствами WinApi добавить памяти блоку на месте?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.09.2023, 02:43
Ответы с готовыми решениями:

Програмное освобождение памяти
У меня на работе компы помощнее нормально работают с макросами (копировать/вставить, циклы и тд), а послабее- память 64 М начинают...

Правильное освобождение библиотеки
Здравствуйте, у меня возникли проблемы с совобожднием DLL из памяти Использую FreeLibraryAndExitThread, т.к. DLL попадает в память не...

Резервирование памяти/освобождение памяти для трехмерного массива
Необходимо создать трехмерный массив (A), в котором элементы вдоль направления Z выли бы выровнены по 16 байт. Есть две проблемы: ...

37
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
20.09.2023, 15:52
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от The trick Посмотреть сообщение
Будет очень очень медленной на массивах со строками
Да, я проверил, у меня получилось 100 млск на 10 МБ данных, 70 МБ текстовых строк огромного массива 700 млск заняло функция проверки SafeArrayGetDim

Добавлено через 15 минут
Только что проверил, а мой код с функцией IsArrayInitialized занимает 0 млск времени, даже на 100МБ данных. Ну теперь я понял, что лучше всего пользоваться функцией IsArrayInitialized значит.
1
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
20.09.2023, 15:53  [ТС]
Интересно, почему разность во времени, по существу же данные о размере содержатся в структуре SA
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
20.09.2023, 15:55
Цитата Сообщение от testuser2 Посмотреть сообщение
почему разность во времени
какая у тебя разность во времени?
0
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
20.09.2023, 16:00  [ТС]
HackerVlad, я вижу у тебя разницу, сам я не проверял
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
20.09.2023, 16:06
testuser2, ничего не понял вообще
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
20.09.2023, 16:06
testuser2, если ArrPtr объявлен через Declare то тут также будет происходить конверсия строк и UDT.

HackerVlad, она будет медленней чем Not Not. И медленней чем ArrPtr для нестроковых и UDT Типов.
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
20.09.2023, 16:09
testuser2, ничего не понял вообще
Цитата Сообщение от The trick Посмотреть сообщение
чем Not Not
Этим я точно пользоваться не буду, раз я не смогу после этого даже один поделить на пять. IsArrayInitialized оптимально. Функцию писал не я, как она работает я не вдавался, но главное, что работает мгновенно и как надо.
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
20.09.2023, 16:14
Цитата Сообщение от HackerVlad Посмотреть сообщение
раз я не смогу после этого даже один поделить на пять.
Это баг IDE. Я делал фикс для этого Trick Advanced Tools. Проще через Debug.Assert просто сбить ошибку.
1
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
20.09.2023, 16:21  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
testuser2, если ArrPtr объявлен через Declare то тут также будет происходить конверсия строк и UDT.
Бред, в смысле жесть. ArrPtr это же всего-лишь возврат указателя неужели все так печально со строками..

Добавлено через 2 минуты
Цитата Сообщение от HackerVlad Посмотреть сообщение
ничего не понял вообще
Что конкретно из ничего? ) У тебя же разное время на 10 мб и на 70, об этом речь.

Добавлено через 2 минуты
Я мельком где-то читал, что какой-то типа маршаллинг работатет при обращении к winapi функциям..
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
20.09.2023, 16:21
Цитата Сообщение от testuser2 Посмотреть сообщение
Что конкретно из ничего? ) У тебя же разное время на 10 мб и на 70, об этом речь.
В смысле разное время? Одинаковое 10 МБ на 100 млск. 70 МБ - 700 млск. Трик говорит, что это из-за того что конвертируются строки из уникода в АНСИ. Наверное поэтому. 100 Мб будет 1 секунда, 1 Гб будет 10 секунд времени значит.
0
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
20.09.2023, 16:23  [ТС]
Маршаллинг, это же когда сначала данные копируются на промежуточный синхронизирующий объект, потом от него в "destination"..
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
20.09.2023, 16:35
Цитата Сообщение от testuser2 Посмотреть сообщение
ArrPtr это же всего-лишь возврат указателя неужели все так печально со строками..
Так на него действуют все те же правила что на любую другую Declared-функцию. Если объявлена в tlb - нет проблем, а в Declare все тоже самое как и с обычным String.
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
20.09.2023, 16:37
The trick, ты хочешь сказать, что если я объявлю SafeArrayGetDim в TLB то функция будет мгновенно работать?
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
20.09.2023, 16:48
Лучший ответ Сообщение было отмечено testuser2 как решение

Решение

Цитата Сообщение от The trick Посмотреть сообщение
testuser2, если ArrPtr объявлен через Declare то тут также будет происходить конверсия строк и UDT.
С массивом UDT я был не прав, UDT массивы не конвертируются, только строковые. Поэтому можно обернуть в UDT с 1 элементов String и конверсии не будет.

Цитата Сообщение от HackerVlad Посмотреть сообщение
The trick, ты хочешь сказать, что если я объявлю SafeArrayGetDim в TLB то функция будет мгновенно работать?
Со строками будет работать на порядки быстрее. Самый быстрый это конечно хак с Not.
1
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
20.09.2023, 17:25  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
С массивом UDT я был не прав, UDT массивы не конвертируются, только строковые. Поэтому можно обернуть в UDT с 1 элементов String и конверсии не будет.
Это меняет дело конечно. Еще можно поместить массив в стек аргументов и вычислить указатель по смещению

Добавлено через 4 минуты
Еще вариант, поместить массив в variant, как у Влада в примере

Добавлено через 13 минут
Цитата Сообщение от The trick Посмотреть сообщение
обернуть в UDT с 1 элементов String и конверсии не будет.
Можно и массив в udt поместить
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
20.09.2023, 17:47
Цитата Сообщение от The trick Посмотреть сообщение
С массивом UDT я был не прав,
то-то я думаю почему у меня в моём массиве пользовательского типа со строками SafeArrayGetDim мгновенно срабатывала
0
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
20.09.2023, 17:51  [ТС]
Про UDT серьёзная инфа вообще.
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
20.09.2023, 17:52
Значит SafeArrayGetDim можно спокойно использовать с массивами пользовательского типа где есть куча строк! И будет 0 млск!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.09.2023, 17:52

Размещение памяти , освобождение памяти
Почему размещение памяти выполняется в два этапа? Почему освобождение памяти происходит в два этапа? void ZLab09::tablica2D(int w,...

Освобождение памяти
Добрый день. Пишу в рубрику "Вопросы начинающих по С/С++" посему вопрос глупый :) И все же, есть такой код //offset - массив...

Освобождение памяти в c++
Привет, помогите разобраться с освобождением памяти в c++. Я так понимаю, что если освободить память, то переменная удаляется, но почему же...

Освобождение памяти
Есть многопоточное приложение. Создается глобальная структура: Пример из msdn. typedef struct _MyData { int val1; ...

Освобождение памяти
Написал программу.Но есть проблема при освобождении памяти,в значениях locals (visual studio 2010) Указатель массивов pAxx остается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru