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

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

21.05.2017, 00:36. Показов 3059. Ответов 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
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
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
Ответ Создать тему
Новые блоги и статьи
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж» Уважаемые коллеги! Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru