|
|
|
Выравнивание размера структуры
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Помогите пожалуйста разобраться с таким вопросом. В моей программе есть структура полями которой являются разные типы данных. Когда я считаю ее размер с помощью функции LenB то оказывается что он больше действительного. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2006, 13:35 |
|
||
|
Выравнивание размера структуры
|
|||
|---|---|---|---|
|
#18+
а ты в инт уверен? я из си читал инт как 4 байта. а short - 2 байта. Ну а лонг - понятно, всегда было 4. Проверь инт. или читай структуру структурой (целиком), а не по полям. Я читал целиком стуктуру из 12 полей ,в т.ч. 2 массива структур, 4 длиииинные подструктуры. Прим. чтение гораздо быстрее. Прим. Возможно также, что VB приписывает нечто. Например официально массив из 12 байт весит 12 байт, но фактически - 12 + 4 на ubound+lbound = 16 (или около того). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2006, 18:32 |
|
||
|
Выравнивание размера структуры
|
|||
|---|---|---|---|
|
#18+
Private Sub Command1_Click() Dim xx As MyType Print Len(xx) End Sub Выдает 6. А уважаемый aklin путает С c VB. Да и там у Вас не все гладко. Согласно ANSI в int хранится слово. А в зависимости о машины, версии компилятора может иметь разную длину. Для 16 разрядного компилятора Borland C, Microsoft C - 2 байта, для 32 - разрядного 4 байта, а для 64 - соответсвенно 8 байт. А для VB по крайней мере VB4-6 (для VB.Net не знаю) одназначно 2 байта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2006, 20:41 |
|
||
|
Выравнивание размера структуры
|
|||
|---|---|---|---|
|
#18+
pro-fan, LenB говорит правду - такая структура действительно занимает 8 байт. HelpWith user-defined types, LenB returns the in-memory size, including any padding between elements. В VB используется выравнивание элементов структуры (UDT) по границе 32-разрядного слова, т.е. 4 байт. Это значит, что элементы размером 1 байт выравниваются по границе байта (= не выравниваются), 2 байта (в т.ч. Integer) - по границе 16 бит, 4 байта и больше - по границе 32 бит. См. MSDN, Q171583. Кстати, поскольку, например, в C/C++ выравнивание можно указать индивидуально для структуры, многие структуры в Win32 API имеют первым полем размер структуры - чтобы было понятно, какое выравнивание было к ним в прикладной программе применено. Для примера возьмём MyType и убедимся, что и как в ней распологается: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2006, 01:15 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=33763457&tid=2165782]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
26ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 326ms |

| 0 / 0 |
