HP OpenVMS Systems Documentation |
HP COBOL
|
Previous | Contents | Index |
HP COBOL without the -align flag or the /ALIGNMENT qualifier or with the /NOALIGNMENT qualifier would align the data as follows:
| | | | | | 1111 1111 | | 1223 | 3444 | 4555 | 5555 | 5 | | 6-77 | 88-- | 9999 | ---- | 0000 | 0000 | |
And finally, HP COBOL with the -align flag or the /ALIGNMENT qualifier would align the data as follows:
| | | | | | 1111 1111 | | 1-22 | 33-- | 4444 | ---- | 5555 | 5555 | 6-77 | 88-- | 9999 | ---- | 0000 | 0000 | |
The examples that follow are applicable to Alpha and I64 only.
Example 16-3 shows the differences in the actions of /NOALIGN, /ALIGN and -align , and /ALIGN=PADDING and -align pad on the internal alignments of data fields within COBOL data structures in the Alpha, I64 and Tru64 UNIX environments.
The program fragment in Example 16-3 was extracted from a COBOL program that was compiled three times on HP COBOL, using the following qualifiers for each compilation:
The excerpts of the Data Names in Declared Order from the listing maps show the differences in vertical format in the Location and Byte columns. Note the horizontal byte layouts to make it easier to read in that orientation.
Example 16-3 shows that /ALIGNMENT without PADDING will align internal COMP fields in the record format on longword boundaries, but will not pad out the lengths of substructures to be multiples of the alignments of the most strongly aligned fields within them. Also, it does not pad the entire data structure. Alternatively, /ALIGNMENT=PADDING pads internal substructures as well as the entire record. The result is many more slack bytes in the record layout for Example 16-6.
Example 16-3 Comparing /NOALIGN, /ALIGN and /ALIGN =PADDING (Alpha, I64) |
---|
4 DATA DIVISION. 5 WORKING-STORAGE SECTION. 6 7 01 REC1. 8 02 FLD1. 9 03 FLD1-1 PIC S9(9) USAGE COMP. 10 03 FLD1-2 PIC S9(03)V9(04) USAGE DISPLAY. 11 02 FLD2 PIC X(005). 12 02 FLD3. 13 03 FLD3-1 PIC X. 14 03 FLD3-2 PIC S9(9) USAGE COMP. 15 03 FLD3-3 PIC S9(5) USAGE DISPLAY. |
Example 16-4 Data Map for /NOALIGNMENT (Alpha, I64) |
---|
Source Listing Data Names in Declared Order Line Level Name Location Size Bytes Usage Category ----- ----- -------- ------------- ---- ----- ------- -------- 7 01 REC1 2 00000000 26 26 DISPLAY Group 8 02 FLD1 2 00000000 11 11 DISPLAY Group 9 03 FLD1-1 2 00000000 9 4 COMP N 10 03 FLD1-2 2 00000004 7 7 DISPLAY N 11 02 FLD2 2 0000000B 5 5 DISPLAY AN 12 02 FLD3 2 00000010 10 10 DISPLAY Group 13 03 FLD3-1 2 00000010 1 1 DISPLAY AN 14 03 FLD3-2 2 00000011 9 4 COMP N 15 03 FLD3-3 2 00000015 5 5 DISPLAY N |
|REC1 | |FLD1 |FLD2 |FLD3 | |FLD1-1 |FLD1-2 | |*|FLD3-2 |FLD3-3 | | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1 5 12 17 22 18 Begin byte number (starting with 0) Record length is 26 bytes. |
The asterisk (*) designates FLD3-1. Also, no padding or filler will result, just as with HP COBOL for OpenVMS VAX on OpenVMS VAX. |
Example 16-5 Data Map for /ALIGNMENT, -align (Alpha, I64) |
---|
Source Listing Data Names in Declared Order Line Level Name Location Size Bytes Usage Category ----- ----- ------ ----------- ----- ---- ------ -------- 7 01 REC1 2 00000000 29 29 DISPLAY Group 8 02 FLD1 2 00000000 11 11 DISPLAY Group 9 03 FLD1-1 2 00000000 9 4 COMP N 10 03 FLD1-2 2 00000004 7 7 DISPLAY N 11 02 FLD2 2 0000000B 5 5 DISPLAY AN 12 02 FLD3 2 00000010 13 13 DISPLAY Group 13 03 FLD3-1 2 00000010 1 1 DISPLAY AN 14 03 FLD3-2 2 00000014 9 4 COMP N 15 03 FLD3-3 2 00000018 5 5 DISPLAY N |
|REC1 | |FLD1 |FLD2 |FLD3 | |FLD1-1 |FLD1-2 | |*| |FLD3-2 |FLD3-3 | | | | | |f f f| | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1 5 12 17 21 25 Begin byte number (starting with 0) Record length is 29 bytes. |
The asterisk (*) designates FLD3-1. The letter f designates internal filler bytes produced because the field FLD3-2 has to start on the boundary that is the next higher multiple of 4 because it is longword-aligned. The intervening three bytes following FLD3-1 are skipped over. |
Example 16-6 Data Map for /ALIGNMENT =PADDING, -align pad (Alpha, I64) |
---|
Source Listing Data Names in Declared Order Line Level Name Location Size Bytes Usage Category ---- ----- ------- ------------ ----- ----- -------- -------- 7 01 REC1 2 00000000 36 36 DISPLAY Group 8 02 FLD1 2 00000000 12 12 DISPLAY Group 9 03 FLD1-1 2 00000000 9 4 COMP N 10 03 FLD1-2 2 00000004 7 7 DISPLAY N 11 02 FLD2 2 0000000C 5 5 DISPLAY AN 12 02 FLD3 2 00000014 16 16 DISPLAY Group 13 03 FLD3-1 2 00000014 1 1 DISPLAY AN 14 03 FLD3-2 2 00000018 9 4 COMP N 15 03 FLD3-3 2 0000001C 5 5 DISPLAY N |
|REC1 |FLD1 |FLD2 |FLD3 | |FLD1-1 |FLD1-2 (1)| | (2) |*| |FLD3-2 |FLD3-3 | (3) | | | |p| |p p p| |f f f| | |p p p| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1 5 13 18 21 25 29 34 36 Begin byte number (starting with 0) Record length is 36 bytes. |
12 = 3 * 4 bytes - multiple of longword alignment |
16 = 4*4 bytes |
36 = 12 + 8 + 16 bytes |
Previous | Next | Contents | Index |