So, how keep private data of separate executions of the same program separate?
==>
Need to re-think linking.
Features:
Position of library code is not know at library link time
==>
library must use position-independent
code (PIC).
|
==>
overhead.
==>
==>
==>
==>
==>
same data in a SASOS
==>
==>
|
libc.mm:
[IMPORTS] [EXPORTS] strlen bcopy ... [OBJECTS] c1.o c2.o ... |
main.mm:
[IMPORTS] libc.mm [EXPORTS] [OBJECTS] main.o sub.o ... |
Cannot do:
extern int errno;
|
extern int *__ errno(); |
|
#define errno (*(__ errno()))
|
|
Irix/32-bit/SGI-cc | Mungi/64-bit/GCC | |||||
static | dynamic | dyn/stat | static | dynamic | dyn/stat | |
lookup | 7.26(3) | 8.02(3) | 1.104(10) | 7.568(6) | 8.199(4) | 1.083(3) |
f. trav. | 4.77(3) | 5.17(4) | 1.084(15) | 6.013(6) | 6.040(3) | 1.004(6) |
b. trav. | 5.13(2) | 5.68(4) | 1.107(12) | 6.976(4) | 7.011(4) | 1.005(1) |
insert | 4.61(2) | 5.02(2) | 1.087(10) | 4.528(4) | 4.755(3) | 1.051(1) |
total | 21.7(1) | 23.9(1) | 1.097(12) | 25.08(1) | 26.00(1) | 1.037(1) |
Irix | Mungi | Mungi/Irix | |||
good | bad | good | bad | ||
lookup | 7.367 | 7.169 | 7.452 | 0.973 | 1.012 |
forward traverse | 5.904 | 6.085 | 6.079 | 1.031 | 1.030 |
backward traverse | 6.796 | 6.992 | 6.991 | 1.029 | 1.029 |
insert | 4.755 | 4.724 | 4.801 | 0.993 | 1.010 |
total | 24.822 | 24.970 | 25.323 | 1.006 | 1.020 |
==>
==>