Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.27;
Скачать: CL | DM;

Вниз

Почему массивы 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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.053 c
1-89998
Saturn
2003-11-17 10:34
2003.11.27
Греческий алфавит


1-89899
Win error
2003-11-15 03:24
2003.11.27
Документ Word


3-89717
xsenort
2003-11-10 22:15
2003.11.27
IB6


1-89920
Olga_Oo
2003-11-18 10:57
2003.11.27
Qreport


1-89841
Erik
2003-11-18 10:56
2003.11.27
Как организовать индекс(отображение) для масива?