Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.106.232] |
|
Сообщ.
#1
,
|
|
|
с точки зрения размера в байтах?
|
Сообщ.
#2
,
|
|
|
Сообщ.
#3
,
|
|
|
Не удержусь и дам свои комментарии по 64bit типу unsigned long long int.
Чтобы почувствовать величину такого максимального целого числа, давайте оценим - за какое время современный процессор сможет обнулить весь такой массив данных. Пусть присваивание нуля на современном компьютере занимает 10^(-10) сек. Тогда массиву чисел от 0 до 2^64 нули можно присвоить за 2^64/(10^10*3600*24)=21350 суток или за 51 год! Это все говорит о том, насколько велико "шахматное число". Кстати, физический объем памяти 2^64 бит не выглядит совсем уж фантастичным. Оценим: 2^64=1.8*10^19. А число Авогадро (число молекул в 1 моле вещества) равно 6*10^23. То есть модуль памяти объемом 2^64 байт будет примерно размером с кремниевый кирпич (1 моль кремния)! И для хранения 1 байта будет выделено примерно 10000 атомов кремния (число Авогадро разделить на 2^64). Выводы на правах ИМХО: 1. Самым слабым звеном в современных ПК давно уже стало быстродействие (тактовая частота процессора). Тактовая частота процессора ограничена размерном атома кремния (примерно 0.1 нанометра или 1 Ангстрем) и равна 3.5-5.0 ГГц. Она же и обеспечивает присваивание целому числу нуля за 10^(-10) сек. А вот модули памяти можно нарастить и до 128Гб, и до 256Гб и до 1Тб... Только вот скорости процессора не хватает, чтобы с ними эффективно работать. 2. Зачем же нужен такой тип данных, как long long int, если работать можно только с милимизерными островками этих данных? Скажу за себя. Я длинное целое использую сейчас в двух случаях: А). Для работы с динамической памятью: при помощи malloc выделяю, например, 6Гб оперативки и потом при помощи long long int нарезаю кусочки от начального указателя выделенного блока. (Есть тема в конференции). Б). Например, для подсчета числа маршрутов в Задаче Коммивояжера, решаемой методом полного перебора. Число маршрутов равно N! На современных ПК Задачу Коммивояжера можно решить полным перебором для числа городов 13, а если подождать пару-тройку часов - то для 14 городов. Если считать маршруты, то 13!=6.2*10^9, а 14!=8.7*10^10 и 32bit целым тут никак не обойдешься! Кстати, по моему опыту обнуление очень большого массива данных (например unsigned char* в 1Гб) - не такая уж и быстрая операция! Занимает порядка 1 сек, что уже видно "на глазок". А большим массивам указателей NULL присваивается еще дольше! Поэтому если в программе, оперирующей с очень большими массивами данных, есть возможность предварительно не обнулять данные перед расчетом - не надо этого делать. Будет долго! Также я сейчас использую для обнуления функцию memset (ну или для того, чтобы задать целым переменным значение -1). Книжки говорят, что memset работает быстрее, чем прямое обнуление в цикле (?) Как то так. Удачи в работе с большими объемами данных и с большими числами! |