Cardinal/ru: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: Cardinal/ru
| Old | New | Line | |
|---|---|---|---|
| 1 | + | **Cardinal** - это целочисленный тип, определенный в качестве псевдонима типа **DWord** для 32-битных платформ. Также как и **DWord** (двойное слово) этот тип данных является 32-битным и интерпретируется как беззнаковое целое. Минимальное значение этого типа 0x0000000, а максимальное - [[Hexadecimal/ru|0xFFFFFFFF]]) (4,294,967,295). | |
| 2 | + | ||
| 3 | + | В системах на базе процессоров x86 тип **Cardinal** часто используется для хранения адресов памяти, как [[Pointer/ru|указатель]]: | |
| 4 | + | ||
| 5 | + | ``` pascal | |
| 6 | + | var | |
| 7 | + | anAddress: Cardinal; | |
| 8 | + | anObject: TObject; | |
| 9 | + | begin | |
| 10 | + | anAddress := Cardinal(Self); | |
| 11 | + | with TObject(anAddress) do | |
| 12 | + | begin | |
| 13 | + | // anAddress is casted as a TObject. | |
| 14 | + | end; | |
| 15 | + | end; | |
| 16 | + | ``` | |
| 17 | + | ||
| 18 | + | Однако, из-за того, что в 32- и 64-битных системах порядок следования байт в памяти *от младшего к старшему*, использование типа **Cardinal** больше не рекомендуется для операций (арифметики) с адресами памяти (указателями). Вместо него рекомендуется использовать типы **NativeInt** или **NativeUInt**. Эти типы соответствуют размерам регистров центрального процессора, которые могут использоваться для работы с адресами памяти, и всегда будут иметь правильный размер. Например, в 64-битных операционных системах тип **NativeUInt** будет аналогичен типу **UInt64** или **QuadWord**, а в 32-битных **NativeUInt** будет аналогичен типу **DWord** или **Cardinal**. | |
| 19 | + | ||
| 20 | + | --- | |
| 21 | + | *From the Free Pascal wiki, page "Cardinal/ru", as it stood on 2020-02-10 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
