Difference between revisions of "Packed"
m (Added back link page) |
m (Fixed typos) |
||
Line 30: | Line 30: | ||
So <syntaxhighlight lang="pascal" enclose="none">packed</syntaxhighlight> sacrifices some speed while reducing the memory used. | So <syntaxhighlight lang="pascal" enclose="none">packed</syntaxhighlight> sacrifices some speed while reducing the memory used. | ||
− | == | + | == Circumvention == |
+ | |||
Smart ordering of record elements can mitigate the issue. | Smart ordering of record elements can mitigate the issue. | ||
In the example above <syntaxhighlight lang="pascal" enclose="none">signedQword</syntaxhighlight> as well <syntaxhighlight lang="pascal" enclose="none">signedQwordPacked</syntaxhighlight> have <syntaxhighlight lang="pascal" enclose="none">signum</syntaxhighlight> located at an offset of <syntaxhighlight lang="pascal" enclose="none">8</syntaxhighlight>. | In the example above <syntaxhighlight lang="pascal" enclose="none">signedQword</syntaxhighlight> as well <syntaxhighlight lang="pascal" enclose="none">signedQwordPacked</syntaxhighlight> have <syntaxhighlight lang="pascal" enclose="none">signum</syntaxhighlight> located at an offset of <syntaxhighlight lang="pascal" enclose="none">8</syntaxhighlight>. | ||
Line 37: | Line 38: | ||
This might cause a potentially slower access to the <syntaxhighlight lang="pascal" enclose="none">value</syntaxhighlight> field. | This might cause a potentially slower access to the <syntaxhighlight lang="pascal" enclose="none">value</syntaxhighlight> field. | ||
− | == | + | == See also == |
+ | |||
* [[sAlign|<syntaxhighlight lang="pascal" enclose="none">{$align}</syntaxhighlight>]] | * [[sAlign|<syntaxhighlight lang="pascal" enclose="none">{$align}</syntaxhighlight>]] | ||
* [[sPack|<syntaxhighlight lang="pascal" enclose="none">{$pack}</syntaxhighlight>]] | * [[sPack|<syntaxhighlight lang="pascal" enclose="none">{$pack}</syntaxhighlight>]] |
Revision as of 12:00, 26 February 2020
│
Deutsch (de) │
English (en) │
русский (ru) │
Back to Reserved words.
The reserved word packed
tells the compiler to use as little memory as possible for a particular complex data type.
Without specifying packed
, the compiler may insert extra unused bytes between members in order to align the data on full word boundaries for faster access by the CPU.
1program packedDemo(input, output, stderr);
2
3type
4 signedQword = record
5 value: qword;
6 signum: -1..1;
7 end;
8
9 signedQwordPacked = packed record
10 value: qword;
11 signum: -1..1;
12 end;
13
14begin
15 writeLn(' signedQword: ', sizeOf(signedQword), 'B');
16 writeLn('signedQwordPacked: ', sizeOf(signedQwordPacked), 'B');
17end.
So packed
sacrifices some speed while reducing the memory used.
Circumvention
Smart ordering of record elements can mitigate the issue.
In the example above signedQword
as well signedQwordPacked
have signum
located at an offset of 8
.
That is OK.
If for any reason value
and signum
were listed in reverse order, signum
would appear in both versions at an offset of 0
, but in the packed
version value
has an offset of 1
Byte.
This might cause a potentially slower access to the value
field.