Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Re: Почему sizeof определяет размер структуры равным 4 байта

Hello All,

---------------------(прог-а и рез-т)struct test
{
__int8 a1;
__int16 a2;
};

void main(void)
{
printf("%d",sizeof(test));
}
......................................................
Результат работы программы:
4
По идее д.б. результат 3, но sizeof возвращает 4,
как-будто в структуре два 16-и битных integer'а !

Объясните пожалуйста почему так???

Ответить   Tue, 6 Jul 2004 23:53:40 +0600 (#185518)

 

Ответы:

Здравствуйте !

Потому что, наверно, в проекте стоит по умолчанию
выравнивание членов структур в 8 байт (или, в 4 или в 2).
Если установить выравнивание в 1, то будет определяться
размер 3.

В VC выравнивание можно задать :
в меню Project/Settings...
вкладка C/C++ выбрать в комбобоксе Category "Code Generation"
В комбобоксе Struct member alignment выбрать 1.

Надо только удалить двоичные файлы и перекомпилить заново
(а то там с PCH конфликт будет).

--
С уважением, Вахтуров Виктор.

Номер выпуска : 3382
Возраст листа : 289 (дней)
Количество подписчиков : 432
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/185535
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Wed, 7 Jul 2004 01:11:01 +0400 (#185535)

 

Все так. Если точнее, правила выравнивания полей структуры такие (ANSI):
1. элементы структуры располагаются последовательно в порядке
их объявления
2. смещения элементов простых типов должны быть кратны
min(n,sizeof(e)), где sizeof(e) - размер элемента,
n - текущее ограничение выравнивания
3. выравнивание элементов типа struct и union определяется
максимальным значением выравнивания
их элементов

Ограничение выравнивания (1,2,4,8,...) устанавливается из
командной строки или прагмой, например:

#pragma pack(1)
...
#pragma pack()

Вторая строчка сбрасывает ограничение выравнивания
в установленное через командную строку.

Правила выравнивания для MSC почти полностью
соответствуют правилам ANSI, приведенным
выше. Аналогичные правила
используются в Delphi.

Номер выпуска : 3383
Возраст листа : 289 (дней)
Количество подписчиков : 433
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/185678
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Wed, 7 Jul 2004 10:11:43 +0400 (#185678)

 

[07.07.2004 19:39] Обнаружено письмо от Victor V. Vakchturov
[07.07.2004 19:39] Тема "Почему sizeof определяет размер структуры равным 4
байта"

А еще можно задать:
#pragma pack(push, ??)
struct ...
#pragma pack(pop)

Правильный синтаксис незнаю, без MSDN обходимся :)

С пожеланием доброго времени суток,
Олень Элмо

JabberID: da.el***@j*****.ru
gpg --keyserver pgp.mit.edu --search-keys da.el***@m*****.ru

Номер выпуска : 3385
Возраст листа : 289 (дней)
Количество подписчиков : 433
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/185966
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Elmo Wed, 7 Jul 2004 19:42:45 -0700 (#185966)

 

Привет,

У меня тут вопросик. Можно ли средствами Delphi написать программку
которая каждые 5 мин будет отправлять на определенный адрес письмо?

/\/\/\/\/\/\/\/\/\/\/\/\/\/\
( с уважением, Octo, пока ;) )
\/\/\/\/\/\/\/\/\/\/\/\/\/\/

Номер выпуска : 3387
Возраст листа : 290 (дней)
Количество подписчиков : 433
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/186283
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Octo Wed, 7 Jul 2004 21:24:57 +0400 (#186283)

 

Hello Octo,

Wednesday, July 7, 2004, 8:24:57 PM, you wrote:

Уважаемый, Octo
Средствами Делфи можно такую програму написать за полчаса,
но если у Вас возникают такие вопросы,то у Вас наверное за полчаса не
получится.

Номер выпуска : 3390
Возраст листа : 290 (дней)
Количество подписчиков : 436
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/186430
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Петро Thu, 8 Jul 2004 08:42:50 +0300 (#186430)

 

Win32)

Доброго времени суток!

On Thu, 8 Jul 2004 08:42:50 +0300 you wrote:

Просто гениальный ответ. Господа, если вам нечего сказать по существу,
то лучше воздержитесь от подобных высказываний.

Номер выпуска : 3392
Возраст листа : 290 (дней)
Количество подписчиков : 436
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/186464
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Thu, 8 Jul 2004 12:05:10 +0400 (#186464)

 

[09.07.2004 8:33] Обнаружено письмо от Pavel aka crazy
[09.07.2004 8:33] Тема "Delphi+e-mail"

^^^^^

Ответ есть, просто он для некоторых очевиден :)

С пожеланием доброго времени суток,
Олень Элмо

JabberID: da.el***@j*****.ru
gpg --keyserver pgp.mit.edu --search-keys da.el***@m*****.ru

Номер выпуска : 3397
Возраст листа : 291 (дней)
Количество подписчиков : 436
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/187101
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Elmo Fri, 9 Jul 2004 08:34:27 -0700 (#187101)

 

Hello Octo,

Wednesday, July 7, 2004, 11:24:57 PM, you wrote:

Средствами дельфи можно написать все...
1-ый вариант - индикомпоненты
2-ой вариант - скачай rfs по smtpпротоколу и пиши на уровне протокола
я предпочитаю второй вариант, т.к. больше возможностей.
по таймеру запускай отправку

Ответить   Thu, 8 Jul 2004 10:39:18 +0600 (#186431)

 

[08.07.2004 12:31] Обнаружено письмо от Octo
[08.07.2004 12:31] Тема "Delphi+e-mail"

Короткий ответ - можно.

Дельфи - язык (среда разработки??) универсального назначения,
ориентированный на графический интерфейс и простоту разработки.

С пожеланием доброго времени суток,
Олень Элмо

JabberID: da.el***@j*****.ru
gpg --keyserver pgp.mit.edu --search-keys da.el***@m*****.ru

Номер выпуска : 3395
Возраст листа : 290 (дней)
Количество подписчиков : 436
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/186904
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Elmo Thu, 8 Jul 2004 12:33:01 -0700 (#186904)

 

Привет, Elmo, мне 08.07.2004 пришло:

А может еще кто-нить приведет пример кода, или хоть приблизительно
скажет, как это делать???

/\/\/\/\/\/\/\/\/\/\/\/\/\/\
( с уважением, Octo, пока ;) )
\/\/\/\/\/\/\/\/\/\/\/\/\/\/

Номер выпуска : 3398
Возраст листа : 291 (дней)
Количество подписчиков : 435
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/187160
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Octo Thu, 8 Jul 2004 20:00:32 +0400 (#187160)

 

Hello Octo,

Thursday, July 8, 2004, 7:00:32 PM, you wrote:

Вешай эту процедуру хоть по клику на кнопку, хоть на таймер,
если не знаеш как,пиши,поможем.

Компонента NMSMTP в Делфи 6 в закладке FastNet.

procedure TForm1.Button1Click(Sender: TObject);
begin
NMSMTP1.Host := 'smtp.mailserver.com';
NMSMTP1.UserID := 'abdulah';
NMSMTP1.Connect;

NMSMTP1.PostMessage.FromAddress := 'отАдреса';
NMSMTP1.PostMessage.ToAddress.Text := 'комуТоПоАдресу';
NMSMTP1.PostMessage.Body.Text := 'Текст письма';
NMSMTP1.PostMessage.Subject := 'Тема письма';
NMSMTP1.SendMail; {и отправляем }
end;

Номер выпуска : 3399
Возраст листа : 291 (дней)
Количество подписчиков : 435
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/187218
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Петро Fri, 9 Jul 2004 08:32:40 +0300 (#187218)

 

Привет, Петро, мне 09.07.2004 пришло:

Всем спасибо за помощь!!! Все получилось)))

Правда более простым методом
На вкладке Indy Clients есть компонента IdSMTP ))))

SMTP1.QuickSend(EditHost.Text, EditSubject.Text,
EditTo.Text, EditFrom.Text, EditText.Text);

P.S. Не думал, что все так просто )))

/\/\/\/\/\/\/\/\/\/\/\/\/\/\
( с уважением, Octo, пока ;) )
\/\/\/\/\/\/\/\/\/\/\/\/\/\/

Номер выпуска : 3401
Возраст листа : 291 (дней)
Количество подписчиков : 435
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/187407
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Octo Fri, 9 Jul 2004 10:27:46 +0400 (#187407)

 

Доброго времени суток, Петро.
Вы писали 9 июля 2004 г., 15:42:38
на тему "Delphi+e-mail"

А в Delphi 7 такого компонента нет. Там Indy. Как с ним работать?

Ответить   Денис Fri, 9 Jul 2004 15:44:04 +0400 (#187578)

 

Столкнулся в C Builder с такой проблемой:
Есть форма и есть кнопка на ней. При загрузке проекта фокус автоматически ставиться
на кнопку. Затем не обходимо онализировать нажатие на клавиши, и если эти клавиши
есть стрелки или Enter, то необходимо выполнять некий набор действий. НО. В процедуры
OnKeyDown и OnKeyPress программа заходит только если нажаты какие-либо другие
клавиши... А вот на нажатие стрелок никак не реагирует. т.е. Ставил брекпоинт,
он даже не заходит в нужную процедуру. Можно ли как-то заставить его анализировать
именно эти клавиши?
Выяснил, что если на кнопке не стоит фокус, то эти события замечательно обрабатываются
формой... Но при этом никак не получаетсся убрать фокус с кнопки...
Проясните ситуацию, кто сталкивался, плиз...

/Alf

Номер выпуска : 3402
Возраст листа : 291 (дней)
Количество подписчиков : 435
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/187408
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Дима Барсуков Fri, 09 Jul 2004 10:52:15 +0400 (#187408)

 

Здоровеньки булы, Дима Барсуков!

9 июля 2004 г., пятница, 11:52:15 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Анализ нажатий",
в котором сообщалось следующее:

OnKeyUp

Ответить   Томилов Александр Fri, 9 Jul 2004 22:12:20 +0500 (#187581)

 

Hello, Дима.

Получается.
Button1.TabStop := False;
Сам помню долго с этим мучался.

<<-------------------------------------->>
"It's no use saying, ''We are doing our best.'' You have got to succeed in doing
what is necessary." - Churchill, Winston

Ответить   "B." Fri, 9 Jul 2004 22:09:51 +0400 (#187642)

 

Здоровеньки булы, B.!

9 июля 2004 г., пятница, 23:09:51 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Анализ нажатий",
в котором сообщалось следующее:

А если по кнопке щелкнуть (чтоб фокус получила) все равно OnKeyDown
работать не будет.

Ответить   Томилов Александр Sat, 10 Jul 2004 13:50:04 +0500 (#187830)

 

Hello, Томилов.

Хм, и правда.
Можно конечно в OnClick написать Form1.SetFocus, но это как-то
некрасиво, да и вообще.

Я тут на досуге подумаю, может как с помощью WinAPI это дело
организовать.

<<-------------------------------------->>
Сервер, не суетись под клиентом!

Ответить   "B." Sat, 10 Jul 2004 14:46:21 +0400 (#187954)

 

Здравствуйте, все!

Можно, только почему-то напрямую фокус форма не передается... Вот в
чем беда...

А кто-нибудь может объяснить, почему все-таки нажатия клавиш enter и
стрелок он в упор не видит? Основная задача - это анализ именно их, а
уже проблемы с фокусом это побочное явление...

Ответить   Alf Sat, 10 Jul 2004 21:56:01 +0400 (#188115)

 

Здоровеньки булы, Alf!

10 июля 2004 г., суббота, 22:56:01 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Анализ нажатий",
в котором сообщалось следующее:

ИМХО все кроется в том что при событиях нажатия на стрелки/таб/ентер
идет переход на другие контролы/вызов OnClick - т.е. служебные
события. Но остается вопрос - почему тогда OnKeyUp срабатывает?

Кстати это тоже не работает как надо (KeyUp работает, а KeyDown -
нет):

TButton_ = class(TButton)
protected
keys : Array[0..255] of Boolean;
procedure WndProc(var Message: TMessage); override;
...

procedure TButton_.WndProc(var Message: TMessage);
begin
case Message.Msg of
WM_KEYDOWN:
begin
keys[Message.WParam] := True;
Message.Result := 0;
end;
WM_KEYUP:
begin
keys[Message.WParam] := False;
Message.Result := 0;
end;
end;
ProcessKeys;
inherited WndProc(Message);
end;

Ответить   Томилов Александр Sun, 11 Jul 2004 19:31:48 +0500 (#188481)

 

Прив, 2071434-comp,

Friday, July 9, 2004, 1:52:15 PM, Вами написано:

Выставь у формы свойство "Обрабатывать сообшения раньше компонентов". Не помню
название смотреть лом.
OnKeyPress не реагирует на скен коды!

Ответить   Sat, 10 Jul 2004 18:38:32 +0700 (#187959)

 

Доброго времени суток, monah.

Вот тут вы не правы. Попробуйте создать пустую форму и у неё назначить
OnKeyDown.
Судя по всему, когда нажимаешь на стрелочки, программа считает, что
юзер хочет переместиться на другой контрол и поэтому не вызывает
OnKeyDown.

<<-------------------------------------->>
Compiling Windows: 95% completed. - Эй, Билл! Опять зависло! - Hичего, сойдет.

Ответить   "B." Sat, 10 Jul 2004 17:27:15 +0400 (#188003)

 

Прив, 2071434-comp,

Saturday, July 10, 2004, 8:27:15 PM, Вами написано:

Не знаю, все работает, onKeyDown и Upp прекрасно ловят все нажатия и выдают скенкод.
Вот если еще кнопку добавить...тогда плохо дело.
А если TabOrder обнулить у всех компонетов?
Я уже пробовал WndProc перехватить, не работает... очень странно.

Ответить   Mon, 12 Jul 2004 01:10:52 +0700 (#188560)

 

Здоровеньки булы, Дима Барсуков!

9 июля 2004 г., пятница, 11:52:15 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Анализ нажатий",
в котором сообщалось следующее:

Короче вот работающий код, я привожу на Delphi - Builder влом ставить
на форме Timer1, Button1, Button2 и ActionControl1 (в нем акшионы
ActionLeft, ActionRight, ActionUp и ActionDown).
Надеюсь в Bilder сможешь сам перевести - там делов на минуту.
PS: На форме две кнопки - координаты меняет та на которой стоит фокус.
PPS: Реализовано немного через задницу, но если нет другого способа
обойти необработку Left, Right, Up, Down через OnKeyDown то я думаю этот сойдет.

public
keys: array[0..255] of Boolean;
procedure ProcessKeys;
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ActionLeftExecute(Sender: TObject);
begin
keys[VK_LEFT] := True;
end;

procedure TForm1.ActionRightExecute(Sender: TObject);
begin
keys[VK_RIGHT] := True;
end;

procedure TForm1.ActionUpExecute(Sender: TObject);
begin
keys[VK_UP] := True;
end;

procedure TForm1.ActionDownExecute(Sender: TObject);
begin
keys[VK_DOWN] := True;
end;

procedure TForm1.ProcessKeys;
begin
with Form1.ActiveControl{ Button1} do
begin
if keys[VK_LEFT] then Left := Left - 1;
if keys[VK_RIGHT] then Left := Left + 1;
if keys[VK_UP] then Top := Top - 1;
if keys[VK_DOWN] then Top := Top + 1;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ProcessKeys;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
ActionLeft.ShortCut := ShortCut(VK_LEFT , []);
ActionRight.ShortCut := ShortCut(VK_RIGHT, []);
ActionUp.ShortCut := ShortCut(VK_UP , []);
ActionDown.ShortCut := ShortCut(VK_DOWN , []);
Timer1.Interval := 10;
Form1.KeyPreview := true;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
keys[Key] := False;
end;

Ответить   Томилов Александр Mon, 12 Jul 2004 01:10:38 +0500 (#188602)

 

Hi, Dm..

Потому что в x86 память выделяется словами, а не байтами. Вывод: ставь
оба 16-битными, ничего не проиграешь.

<<-------------------------------------->>
"We live in deeds, not years: In thoughts not breaths; In feelings, not in figures
on a dial. We should count time by heart throbs. He most lives Who thinks most,
feels the noblest, acts the best." - Bailey, David

Ответить   "B." Wed, 7 Jul 2004 10:02:39 +0400 (#185783)

 

Hello B.,

Wednesday, July 7, 2004, 12:02:39 PM, you wrote:

Может ты имел ввиду 16-и разрядную адресацию данных, ИМХО вроде
выделение памяти от этого не зависит, а память выделяется в
зависимости от команды процессору...
Может я чего-то не понимаю?

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

PS. to ALL: Большое спасибо всем кто помог в решением сабжевой проблемы :)

Ответить   Wed, 7 Jul 2004 19:34:04 +0600 (#186282)

 

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

Hello B.,

Wednesday, July 7, 2004, 12:02:39 PM, you wrote:

Может ты имел ввиду 16-и разрядную адресацию данных, ИМХО вроде
выделение памяти от этого не зависит, а память выделяется в
зависимости от команды процессору...
Может я чего-то не понимаю?

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

PS. to ALL: Большое спасибо всем кто помог в решением сабжевой проблемы :)

--
Best regards,
Dmitry

Номер выпуска : 3386
Возраст листа : 290 (дней)
Количество подписчиков : 433
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/186282
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Номер выпуска : 3388
Возраст листа : 290 (дней)
Количество подписчиков : 436
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/186357
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Thu, 8 Jul 2004 08:14:24 +0300 (#186357)

 

Hello, Dm..

Не знаю, как VC++ делает, но если в паскалевской проги написать что-то
типа

program test;
var
b: byte;
begin
b := 10;
writeln(b);
end.

Это дело скомпилировать, а потом дизасемблировать, то можно увидеть,
выделяется не один, а два байта. А там, где обращение к b, идёт
преобразование (десятку в однобайтное число и загнать в младший байт
b, которое на самом деле word), следовательно лишний код,
следовательно мы получаем не оптимизацию, а наоборот.

А, ну тогда да. Но в памяти хранить такое не целесообразно. Ради этого
и идёт выравнивание (наверное).

<<-------------------------------------->>
О человеке можно судить по его Temporary Internet Files...

Ответить   "B." Thu, 8 Jul 2004 09:28:33 +0400 (#186408)

 

Hello Dm.,

Tuesday, July 6, 2004, 9:53:40 PM, you wrote:

Из-за того, что
процессор i386 (etc) имеет 32-разрядную шину, обмен данными между
процессором и памятью производится двойными словами,
начинающимися с адресов, кратных четырем. Процессор преобразует
запросы невыровненных слов или двойных слов в последовательность
запросов, допустимых для интерфейса с памятью. Таким образом,
отсутствие выравнивания данных снижает производительность из-за
увеличения количества обращений к памяти. Для повышения
производительности структуры данных (особенно стеки) следует
выравнивать по четным адресам и по адресам, кратным четырем.
Поэтому компилятор для оптимизации работы твоей программы
выравнивает структуру в памяти, делая ее размер кратным двойному
слову.

Ответить   Cyberbob Thu, 8 Jul 2004 17:13:07 +0400 (#186799)