Difference between revisions of "Word"
Jwdietrich (talk | contribs) |
|||
(9 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | + | {{Word}} | |
− | + | A '''word''' is the processor’s native data unit. | |
+ | Modern consumer processors have a word width of [[64 bit|64 bits]]. | ||
+ | |||
+ | == Data type == | ||
+ | Most [[RTL|run-time libraries]] provide the native data type of a processor as the Pascal data type <syntaxhighlight lang="pascal" inline>word</syntaxhighlight>. | ||
+ | It is a subset of all whole numbers (non-negative integers) that can be represented by the processor’s natural data unit size. | ||
+ | |||
+ | On a 64-bit architecture this means a <syntaxhighlight lang="pascal" inline>word</syntaxhighlight> is an integer within the range <math>[0,~2^{64}-1]</math>. | ||
+ | On a 32-bit architecture a <syntaxhighlight lang="pascal" inline>word</syntaxhighlight> will be an integer in the range <math>[0,~2^{32}-1]</math>, and so on, respectively. | ||
+ | |||
+ | In [[GNU Pascal]] a <syntaxhighlight lang="pascal" inline>word</syntaxhighlight> is just an alias for [[Cardinal|<syntaxhighlight lang="pascal" inline>cardinal</syntaxhighlight>]], which has the same properties regarding possible values. | ||
+ | |||
+ | If a ''signed'' integer having the processor’s native size is wanted, the data type [[Integer|<syntaxhighlight lang="pascal" inline>integer</syntaxhighlight>]] provides this functionality. | ||
+ | |||
+ | === FPC === | ||
+ | For source compatibility reasons, [[FPC]] defines <syntaxhighlight lang="pascal" inline>word</syntaxhighlight> in the same way as Turbo Pascal and Delphi: the subrange data type <syntaxhighlight lang="pascal" inline>0..65535</syntaxhighlight>. | ||
+ | The <syntaxhighlight lang="delphi" inline>high</syntaxhighlight> value <syntaxhighlight lang="pascal" inline>65535</syntaxhighlight> is <math>2^{16}-1</math>. | ||
+ | Thus a {{Doc|package=RTL|unit=system|identifier=word|text=<syntaxhighlight lang="pascal" inline>system.word</syntaxhighlight>}} occupies two bytes of space. | ||
+ | Subrange data types are stored in a quantity that serves best the goals of performance and memory efficiency. | ||
+ | |||
+ | The processor’s native word size, as defined above, corresponds to different types depending on the purpose you want to use it for: | ||
+ | * the (as of 2020 still undocumented) {{Doc|package=RTL|unit=system|identifier=alusint|text=<syntaxhighlight lang="pascal" inline>system.ALUSint</syntaxhighlight>}} and {{Doc|package=RTL|unit=system|identifier=aluuint|text=<syntaxhighlight lang="pascal" inline>system.ALUUint</syntaxhighlight>}} types correspond to the native word size used by the processor’s ALU (arithmetic and logical unit), as define at the beginning of this page. In general, this type should not be used in high level code. Instead, choose a data type based on the values it should be able to represent, as this is safer and more portable. It is the compiler’s job to generate optimal code. | ||
+ | * {{Doc|package=RTL|unit=system|identifier=codeptruint|text=<syntaxhighlight lang="pascal" inline>system.CodePtrUInt</syntaxhighlight>}} corresponds to the size of pointers to code, such as the address of a [[Procedure|procedure]]. This can be different from a pointer to data, e. g. on targets that support multiple [[DOS#Supported memory models|memory models]]. | ||
+ | * {{Doc|package=RTL|unit=system|identifier=ptruint|text=<syntaxhighlight lang="pascal" inline>system.PtrUInt</syntaxhighlight>}} corresponds to the size of pointers to data. | ||
+ | |||
+ | On many platforms, all of these types have the same size, but it is not the case everywhere. | ||
+ | |||
+ | In FPC a [[Smallint|<syntaxhighlight lang="pascal" inline>smallInt</syntaxhighlight>]] has the same size as a <syntaxhighlight lang="pascal" inline>word</syntaxhighlight>, but is signed. | ||
{{Data types}} | {{Data types}} |
Revision as of 12:42, 24 November 2020
│
Deutsch (de) │
English (en) │
suomi (fi) │
français (fr) │
русский (ru) │
A word is the processor’s native data unit. Modern consumer processors have a word width of 64 bits.
Data type
Most run-time libraries provide the native data type of a processor as the Pascal data type word
.
It is a subset of all whole numbers (non-negative integers) that can be represented by the processor’s natural data unit size.
On a 64-bit architecture this means a word
is an integer within the range [math]\displaystyle{ [0,~2^{64}-1] }[/math].
On a 32-bit architecture a word
will be an integer in the range [math]\displaystyle{ [0,~2^{32}-1] }[/math], and so on, respectively.
In GNU Pascal a word
is just an alias for cardinal
, which has the same properties regarding possible values.
If a signed integer having the processor’s native size is wanted, the data type integer
provides this functionality.
FPC
For source compatibility reasons, FPC defines word
in the same way as Turbo Pascal and Delphi: the subrange data type 0..65535
.
The high
value 65535
is [math]\displaystyle{ 2^{16}-1 }[/math].
Thus a system.word
occupies two bytes of space.
Subrange data types are stored in a quantity that serves best the goals of performance and memory efficiency.
The processor’s native word size, as defined above, corresponds to different types depending on the purpose you want to use it for:
- the (as of 2020 still undocumented)
system.ALUSint
andsystem.ALUUint
types correspond to the native word size used by the processor’s ALU (arithmetic and logical unit), as define at the beginning of this page. In general, this type should not be used in high level code. Instead, choose a data type based on the values it should be able to represent, as this is safer and more portable. It is the compiler’s job to generate optimal code. system.CodePtrUInt
corresponds to the size of pointers to code, such as the address of a procedure. This can be different from a pointer to data, e. g. on targets that support multiple memory models.system.PtrUInt
corresponds to the size of pointers to data.
On many platforms, all of these types have the same size, but it is not the case everywhere.
In FPC a smallInt
has the same size as a word
, but is signed.
simple data types |
|
---|---|
complex data types |