Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];

Вниз

Почему массивы Boolean сохраняются на диск как одно   Найти похожие ветки 

 
Кен   (2003-11-12 07:04) [0]

значение - один байт ?
Как мне сохранить, чтобы было одно значение - один бит ?
var
Boo1: array[0..100000] of Boolean;
begin
with TFileStream.Create("_array.dat", fmCreate or fmOpenWrite) do begin
WriteBuffer(Boo1, SizeOf(Boo1));
Free;
end;


 
Hooch   (2003-11-12 07:19) [1]

прикольно :-)


 
Hooch   (2003-11-12 07:26) [2]

попробуй так
WriteBuffer(Boo1[0], Length(Boo1)*SizeOf(Boolean));


 
default   (2003-11-12 07:27) [3]

"Как мне сохранить, чтобы было одно значение - один бит ?"
думай)это можно)не заставлять же весь форум за тебя думать(


 
Hooch   (2003-11-12 07:28) [4]

или я вопрос не так понял ?


 
default   (2003-11-12 07:28) [5]

можешь кстати юзать множества...


 
Юрий Зотов   (2003-11-12 07:30) [6]

> Кен
Подсказка - битовые (флаговые) операции. AND, OR, NOT.


 
ЮЮ   (2003-11-12 07:30) [7]

Меньше одного байта не запишешь.
Вывод:
1) при записи "сжимать" 8 элементов в 1 байт
2) использовать другую структуру для хранения массива Boolean


 
default   (2003-11-12 07:31) [8]

ЮЮ © (12.11.03 07:30) [7]
ясно, что уже речи о типе Boolean идти не будет...


 
ЮЮ   (2003-11-12 07:53) [9]

Если не жалко 100 001 байт памяти, то чего их жалеть на диске? :-)


 
default   (2003-11-12 08:53) [10]

класс TBits ещё есть)


 
Кен   (2003-11-14 02:16) [11]

В общем оказалось, что Дельфи хранит все булены как байты. Это хорошо видно в отладчике. И миллион буленов - это мегабайт, а не 128 кб.

Получается, что фактически Дельфи не умеет работать с битовыми переменными. Она только может представлять байты как биты, что не особо хорошо.

Видно действительно предётся использовать and xor shl и прочее.
Прямо ассемблер какой-то.

По этому поводу ещё вопрос возник.
Longword 0..4294967295 unsigned 32-bit
и
Longint -2147483648..2147483647 signed 32-bit
- это одно и тоже ? При работе с битами Longint не возникает ошибок из-за минуса ?

А ещё есть Int64 и ММХ, с которым я не знаю как работать. Вот и вопрос, а что из всего этого быстрее работает с точки зрения процессора ? Мне то всё равно как писать, а процессору будет приятно.


 
default   (2003-11-14 02:19) [12]

класс TBits говорю глянь


 
Suntechnic   (2003-11-14 02:27) [13]

>Кен ©
По этому поводу ещё вопрос возник.
Longword 0..4294967295 unsigned 32-bit
и
Longint -2147483648..2147483647 signed 32-bit
- это одно и тоже ? При работе с битами Longint не возникает ошибок из-за минуса ?


У кого как :) А вообще ты бы почитал книжечек что ли на досуге, прежде, чем с такими вопросами на форуме выступать.


 
Юрий Зотов   (2003-11-14 07:02) [14]

> Кен © (14.11.03 02:16) [11]

> Получается, что фактически Дельфи не умеет работать с битовыми
> переменными. Она только может представлять байты как биты, что
> не особо хорошо.

Можете назвать хоть язык высокого уровня, который позволяет работать напрямую с битами? Или можете назвать хоть один ассемблер, который позволяет это делать? Для платформы x86, например?

Во всех ЯВУ (и даже в ассемблерах) битовые операции делаются именно через AND, OR, NOT, XOR. И, надо полагать, неспроста? Видимо, для этого есть какие-то причины?

Открою Вам страшную тайну. Каждый CPU имеет определенный набор машинных команд - причем он умеет исполнять только их и ничего другого. И если в этом наборе нет команд для прямой работы с битами (кроме тех самых AND, OR, NOT, XOR), то, естественно, никакой компилятор и никакой ассемблер Вам их не предоставят. Поскольку взять их просто негде. Можно только написать реализующую их библиотеку функций - но в этом нет никакого смысла, потому что в ней будут сидеть те же самые AND, OR, NOT, XOR.

Так что дело тут не в Delphi, а недовольство Ваше, мягко говоря, необосновано. Чем оно вызвано - говорить, вероятно, не стоит, и без слов понятно.

Поскольку подобные высказывания наблюдаются совсем не впервые, позволю себе совет. Когда Вам в следующий раз что-то в Delphi (и не только в Delphi) покажется плохим, неудобным и т.д., то, прежде чем высказываться по этому поводу на публике, задумайтесь - а почему же разработчики сделали именно так, а не иначе? Вероятно, ведь они не дураки, а их знания и квалификация очень высоки, верно? И если они сделали именно так, то, может, для это были какие-то причины, которых Вы просто не понимаете?

А то, извините, смешно читать такую "критику". Некая басня Крылова сразу вспоминается.


 
Slym   (2003-11-14 07:17) [15]

Ты сохраняешь уразатель на Boo1 (4 байта)!!!


 
Юрий Зотов   (2003-11-14 08:09) [16]

> Slym © (14.11.03 07:17) [15]

Уверены? Если да, то зря - массив статический.


 
ЮЮ   (2003-11-14 09:40) [17]

>И миллион буленов - это мегабайт, а не 128 кб.
Миллион рисуют с шестью нулями, а не с пятью

Когда не хватает памяти, начинают думать над алгоритмом.


 
default   (2003-11-14 22:26) [18]

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


 
Кен   (2003-11-15 01:41) [19]


> ЮЮ © (14.11.03 09:40) [17]
> >И миллион буленов - это мегабайт, а не 128 кб.
> Миллион рисуют с шестью нулями, а не с пятью

Один байт - 8 битов.


> default © (14.11.03 22:26) [18]
> а причина скорее в том, что единица адресуемой информации
> есть байт, а не бит, поэтому и нет команд работы напрямую
> с битами,

На то и существуют языки высокого уровня, чтобы представлять информамцию так, как удобно человеку.


> default © (14.11.03 02:19) [12]
> класс TBits говорю глянь

Руль, руль.


 
default   (2003-11-15 01:46) [20]

Кен © (15.11.03 01:41) [19]
вот тебе и написали класс TBits, или ты хотел бы, чтобы тебе давали право объявлять переменные размеров в бит?вот я и говорю - всё равно пришлось бы для них байт выделять, что мы и наблюдаем


 
default   (2003-11-15 01:49) [21]

хотя нет - можно было бы так сделать...


 
sniknik   (2003-11-15 02:15) [22]

Удалено модератором
Примечание: Без мата


 
Кен   (2003-11-15 02:35) [23]

Удалено модератором
Примечание: Оскорбление участников


 
sniknik   (2003-11-15 02:49) [24]

Удалено модератором
Примечание: Без мата


 
Johnmen   (2003-11-15 02:52) [25]

>Кен © (15.11.03 02:35)

Вах !!! А зачем тогда лезешь сюда с ламерскими вопросами ? Видимо, все-таки, хочешь пообщаться...:)


 
Кен   (2003-11-15 03:01) [26]


> sniknik © (15.11.03 02:49) [24]
> кааакой обидчивый. а ведь не по делу.
>> Я не хочу с вами общаться.
примем к сведению.

Сорри. Забыл указать кому. Это было исключительно Юрию Зотову. Я ему это уже говорил одныжды, но он похоже забыл.


 
Кен   (2003-11-15 03:13) [27]


> Johnmen © (15.11.03 02:52) [25]
> >Кен © (15.11.03 02:35)
>
> Вах !!! А зачем тогда лезешь сюда с ламерскими вопросами
> ? Видимо, все-таки, хочешь пообщаться...:)

На форум как раз и ходят в первую очередь те у кого есть вопросы.
И ходят отнюдь не для того, чтобы выслушать какие они идиоты. Или советы типа иди ты в Гугль.


 
Zacho   (2003-11-15 03:36) [28]


> Кен © (15.11.03 03:13) [27]

А зря ты не хочешь с ЮЗ общаться. В его "нравоучениях" содержится масса полезной информации. А "идиотом" тебя вроде бы никто не называл.
А вообще-то, на твой изначальный вопрос тебе уже ответили.
P.S. Признайся все-таки, если не секрет, зачем в программе 100000 переменных типа boolean ? К тому же таких, которые надо сохранять. А может ты просто какой-то неправильный способ выбрал для решения своей задачи ?


 
Кен   (2003-11-15 03:36) [29]

Ладно. Возможно я чуток и погорячился. Но просто человек немного достал, своими наездами, баснями Крылова и прочим базаром не про Дельфи.


 
Кен   (2003-11-15 03:59) [30]


> Zacho © (15.11.03 03:36) [28]
>
> > Кен © (15.11.03 03:13) [27]
>
> А зря ты не хочешь с ЮЗ общаться. В его "нравоучениях" содержится
> масса полезной информации. А "идиотом" тебя вроде бы никто
> не называл.

А я ТАК и не говорил.


> Признайся все-таки, если не секрет, зачем в программе 100000
> переменных типа boolean ? К тому же таких, которые надо
> сохранять. А может ты просто какой-то неправильный способ
> выбрал для решения своей задачи ?

Там из большой базы выбираются нужные строчки. Исходя из одна строка - один boolean. Если строка удовлетворяет условию, то значение ставится в true, если нет, то false. Всё это скидывается в файл на диск.


 
Zacho   (2003-11-15 04:02) [31]


> Кен © (15.11.03 03:59) [30]

Любопытно. Опиши подробнее, зачем это ? То есть, зачем это скидывать на диск ? Что дальше с этим делается ?


 
Кен   (2003-11-15 04:27) [32]


> Zacho © (15.11.03 04:02) [31]
>
> > Кен © (15.11.03 03:59) [30]
>
> Любопытно. Опиши подробнее, зачем это ? То есть, зачем это
> скидывать на диск ? Что дальше с этим делается ?

Другая программа читает этот индексный файл(или любой другой) и по нему работает только с помеченными строчками.


 
Юрий Зотов   (2003-11-15 06:37) [33]

> Кен © (15.11.03 03:01) [26]

Сообщаю Вам, что в соответствии с правилами этого форума я буду читать все, что мне захочется и отвечать так, как мне вздумается. Тоже в пределах правил, разумеется. Пока что отвечаю так: если не хотите, слышать как смеются над Вашими глупостями, то не говорите их. Например, если бы к своему постингу [11] Вы добавили вступительное слово "почему", то и ответ был бы несколько другим.

К несчастью, то ж бывает у людей,
Как ни полезна вешь, цены не зная ей
Невежда про нее все к худу клонит,
А ежели невежда познатней -
Так он ее еще и гонит.

Это и есть та самая басня. "Мартышка и очки" называется. Рекомендуется к прочтению. Наряду с прочтением хотя бы одной книги по основам программирования.


 
Palladin   (2003-11-15 06:43) [34]

Ничем не оправданное чуточное погаречение. Это раз.
Не описана проблема - это два.

> Я тоже позволю себе совет, засуньте свой совет и свои нравоученя
> себе куда поглубже, дабы не быть посланным. И не читайте
> вы мои постинги, и не отвечайте на них. Я не хочу с вами
> общаться

Иди в приват.
Интересно что было бы если бы ты на улице крикнул свой вопрос и ходил бы потом каждому услышавшему объяснял на ушко, что не попшел бы он куда подальше. И не стоит так категорично относится к высказываниям людей которые побольше твоего смыслят в системе, а вот стоит все таки попытатся понять, что они добиваются своими словами донести до тебя. Ибо если этого не сделать, то к сожалению окажешься сам гораздо глубже чем когда то советовал оказатся другому.


 
Palladin   (2003-11-15 06:45) [35]


> Не описана проблема - это два

Вернее "проблема" описана, но я не вижу в ней проблемы.
Стоит задать конкретный вопрос прежде чем надеятся получить конкретный ответ или совет.


 
sniknik   (2003-11-15 12:10) [36]

> Это было исключительно Юрию Зотову

то к кому именно "нелюбовь" понятно по тем строкам на которые комментарии. (но общатся все одно со всеми отказался)

---
исключительный человек ЮЗ. ;о))))


 
app   (2003-11-15 12:26) [37]

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.009 c
14-90055
ghg
2003-11-05 15:16
2003.11.27
многоязыковые приложения


8-90010
JohnJ
2003-07-30 01:17
2003.11.27
Небольшой и, должно быть, лёгкий вопросик по DelphiX


14-90099
NeyroSpace
2003-10-31 18:14
2003.11.27
Вещение по локальной сети.


6-90035
leonidus
2003-09-30 23:15
2003.11.27
Где найти компонент для парсинга HTML-документов и работы с RAS?


1-89866
Varelik
2003-11-13 14:01
2003.11.27
Рассыпается дизайн при смене крупного шрифта системы на мелкий.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский