Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170

Удаление/очищение карты в коде, советы по оптимизации (карта до 1 Гб)

21.05.2017, 00:36. Показов 3165. Ответов 26
Метки map (Все метки)

Студворк — интернет-сервис помощи студентам
Вот куски кода (полный код тут):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <map>
#include <bitset>
#include <iostream>
 
using namespace std;
 
unsigned long s4_char4(unsigned char S[4]) { ... }
unsigned long Ly_char4(unsigned char S[4]) { ... }
unsigned long Rs_char4(unsigned char S[4]) { ... }
 
unsigned long(*F_char4[])(unsigned char S[4])={s4_char4, Ly_char4, Rs_char4};
 
// Double Bitset
bitset<ULONG_MAX> *first  = new bitset<ULONG_MAX>();
bitset<ULONG_MAX> *second = new bitset<ULONG_MAX>();
char ffffffff(0); // 0xffffffff
 
void main()
{ 
 
    for(char i(-1); ++i != sizeof(F_char4)/sizeof(F_char4[0]); (*first).reset(), (*second).reset(), ffffffff = 0)
    {
 
162        map<unsigned long, unsigned short> count;
163        map<unsigned short, unsigned short> COUNT;
            
       // код обработки (ULONG_MAX+1) хэшей
 
259        for(map<unsigned  long, unsigned short>::iterator it(count.begin()); it != count.end(); ++COUNT[(*it).second], ++it)
260            if(!(short)++enumerator) cout << "\rCount<" << enumerator << "> converted"; // Если убрать эту строчку, программа может намертво зависнуть, почему?
261        cout << "\rCount<" << enumerator << "> converted";
262        for(map<unsigned short, unsigned short>::iterator it(COUNT.begin()); it != COUNT.end(); cout << "\nHash<" << (*it).first+3 << "> = " << (*it).second, ++it);
    }
 
}
1. Строчка 260 (вопрос в комментариях, не критично, но вводит в ступор полный...)
2. где лучше всего и каким образом делать полное очищение MAP ?
Я так понимаю как я сделал переопределение (строчка 162-163) это плохо?

Добавлено через 12 минут
Можно ли делать удаление элементов в строчках 259 и 262 соответственно?
после вывода итератора
и можно как то перебирать элементы без итератора?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2017, 00:36
Ответы с готовыми решениями:

Советы по оптимизации кода
Написал парсер данных. Подскажите как можно было сделать проще? Стрелка должна быть в отдельной переменной. &lt;?php $a =...

Нужны советы по оптимизации
Поделитесь советами как оптимизировать сайт um16.ru Всем огромное спасибо

Ваши советы по оптимизации.
Привет, имею развлекательный портал. Регистрировал по тысячам разных каталогов, пытаюсь сделать сайт для людей, а не для рекламы,...

26
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
25.05.2017, 13:13  [ТС]
Студворк — интернет-сервис помощи студентам
А в чем плюс хранить их в main ?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
25.05.2017, 13:18
Цитата Сообщение от eXPonent Посмотреть сообщение
А в чем плюс хранить их в main ?
Скорее не плюс а отсутствие минуса в виде глобальной переменной. В чём минусы глобальных переменных расписывать как-то не хочется, если интересует - поищите по форуму обсуждение.
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
25.05.2017, 13:45  [ТС]
А
C++
1
unsigned char DB[0x40000000]; // Double Bitset
вы то же мне порекомендуете из глобальных перенести в main()?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
25.05.2017, 14:09
Цитата Сообщение от eXPonent Посмотреть сообщение
вы то же мне порекомендуете из глобальных перенести в main()?
Я вообще рекомендую минимизировать область видимости переменной. Тем более, если они требуют большого количества памяти. Ведь глобальные переменные существуют всё время жизни программы, а локальные освобождают память при выходе из области видимости.
Да и множество глобальных переменных свидетельствуют о плохой архитектуры программы.

Добавлено через 2 минуты
У вас куча энтузиазма, вы придумываете для себя интересные задачки. Вы молодец, это задатки хорошего программиста! Но вопросы порой задаёте совсем примитивные. Я понимаю, что вы больше практик, но всё-таки теория у вас сильно хромает. Не поленитесь прочитать книжку по основам плюсов, это поможет вам сэкономить время на переписывание и построить лучшую архитектуру.

Добавлено через 6 минут
Далеко не ходя, Использование глобальных переменных
1
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
25.05.2017, 15:08  [ТС]
unsigned char DB[0x40000000];

Я поместил в глобальные, так как происходит постоянное обращение к ним
в main() и в других (тестирующих память) функциях, нет той функции в которой не производится (Read - Write массива)
мне показалось глупо и лишнем, передавать каждый раз в функции адресс массива

Подобное объявление глобальной переменной я делаю впервые
до этого максимум const объявление делал

Добавлено через 2 минуты
Кстати, принудительное прописывание функции через switch увеличило скорость подсчитывания хэша в три раза)))

Добавлено через 1 минуту
Спасибо за совет и напутствие...

Добавлено через 34 минуты
Цитата Сообщение от Jodah Посмотреть сообщение
Использование глобальных переменных снижает читабельность, делает код сложным для понимания. Очень сложно определить где, как и с какой целью была проинициализирована глобальная переменная и как правильно ее использовать.
У меня одна глобальная переменная(массив)
К переменно даны пояснения в комментариях, а так же краткое описание

Цитата Сообщение от Jodah Посмотреть сообщение
Код с глобальными переменными сложно сопровождать. При изменении глобальной переменной вы вынуждены просматривать весь код, чтобы внести изменения везде, где используется эта переменная.
Вот этот момент я не понял.

Цитата Сообщение от Jodah Посмотреть сообщение
Злоупотребление глобальными переменными может привести к ошибкам, которые очень сложно отлаживать. Без какого-либо механизма контроля за использованием переменной очень просто записать в переменную невалидные данные, которые могут привести к ошибкам в других частях кода (например, если в одной части кода переменная заполняется массивом, а в другой части кода в этой переменной ожидается объект).
Механизмы поиска ошибок у меня в коде присутствуют
(даже если бы переменная была локальная, я бы пользовался операциями ожидающего результата, для проверки правильности выполнения кода)

Цитата Сообщение от Jodah Посмотреть сообщение
Можно забыть объявить переменную глобальной и работать с локальной переменной, не замечая этого, до тех пор пока приложение не сломается. Такие ошибки сложно отлаживать.
Пока у меня переменная только одна, думаю это трудно забыть её

Цитата Сообщение от Jodah Посмотреть сообщение
Если вы совмещаете свой код с чужим (например при использовании стороних библиотек или при написании расширений для другого ПО) и обе системы используют глобальные переменные, существует вероятность того, что названия переменных могут совпасть. Это становится причиной возникновения ошибок в обеих системах, которые сложно отлавливать.
тут согласен, но коды я совмещаю, только хэш-функции, а в них не используется глобальная переменная

Цитата Сообщение от Jodah Посмотреть сообщение
Все части кода, использующие одну глобальную переменную, сильно связаны между собой. Разделить сильно связанный код очень сложно. Это затрудняет его повторное использование.
Согласен. но в программе будут поддерживаться ключи
что бы запустить одну функцию

Цитата Сообщение от Jodah Посмотреть сообщение
Написание юнит-тестов становится более сложным, поскольку тесту не известно, какие глобальные переменные нужны и как проинициализировать все глобальные переменные валидными значениями.
Валидные значения известные, это DB[i] = 0
проверка этих значений, при выполнения блока подсчета хэш-функций, происходит

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Глобальные переменные полезны для разгона вашего кода. Передача параметров между функциями происходит непосредственно, без особых накладных расходов. Это как в Форте - через общий стек, и, кстати, там не парятся по поводу возможного конфликта, так как привыкли держать всё под контролем. В общем, в каждом случае надо взвешивать все за и против. В одном случае это будет оправданно, а в другом нет. В гэймдеве использование глобальных переменных - нормальное явление, ибо там нужна скорость работы кода.
0
Эксперт PHP
3901 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,917
25.05.2017, 15:45
eXPonent, хм, откуда эти цитаты? Не вижу здесь такого поста, тем более никогда не писал в разделе С++.
1
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
25.05.2017, 15:47  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
откуда эти цитаты?
Форум Теория и практика программирования. Минусы глобальных переменных - Программирование
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2017, 15:47

Дайте советы по оптимизации
Народ. Дайте советы, как оптимизировать сайт для Гугли. Сайт сейчас в разработке (т.е редакторы пишут тесты, дизайнеры диз. рисуют). ...

Нужны советы по оптимизации
Обращаюсь к специалистам котоыре смогут подсказать моменты которые нужно исправить добавить на сайте technopol.com.ua занимаюсь...

Ваши советы по оптимизации сайта
Что можете посоветовать по оптимизации сайта http://podlodka.info

Критика кода и советы по поводу оптимизации
Всем добрый вечер. Написал игру крестики-нолики в текстовом режиме для 2 игроков. Работает как и должна. Хотел бы увидеть комментарии по...

Советы по оптимизации роботы с большими массивами.
Интересуют методы оптимизации работы с большими массивами Обрабатываются большие (несколько мегабайт) текстовые файлы. Они считываются...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru