Region-based memory management
ಕಂಪ್ಯೂಟರ್ ವಿಜ್ಞಾನದಲ್ಲಿ, ಪ್ರದೇಶ-ಆಧಾರಿತ ಮೆಮೊರಿ ನಿರ್ವಹಣೆಯು ಒಂದು ರೀತಿಯ ಮೆಮೊರಿ ನಿರ್ವಹಣೆಯಾಗಿದ್ದು, ಇದರಲ್ಲಿ ನಿಗದಿಪಡಿಸಿದ ಪ್ರತಿಯೊಂದು ವಸ್ತುವನ್ನು ಒಂದು ಪ್ರದೇಶಕ್ಕೆ ನಿಯೋಜಿಸಲಾಗುತ್ತದೆ. ವಲಯ, ಅಖಾಡ, ಪ್ರದೇಶ ಅಥವಾ ಮೆಮೊರಿ ಸಂದರ್ಭ ಎಂದೂ ಕರೆಯಲಾಗುವ ಪ್ರದೇಶವು ನಿಯೋಜಿಸಲಾದ ವಸ್ತುಗಳ ಸಂಗ್ರಹವಾಗಿದ್ದು, ಅವುಗಳನ್ನು ಏಕಕಾಲದಲ್ಲಿ ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಮರುಹೊಂದಿಸಬಹುದು ಅಥವಾ ವಿಂಗಡಿಸಬಹುದು. ಸ್ಟ್ಯಾಕ್ ಹಂಚಿಕೆಯಂತೆ, ಪ್ರದೇಶಗಳು ಕಡಿಮೆ ಓವರ್ಹೆಡ್ನೊಂದಿಗೆ ಮೆಮೊರಿಯ ಹಂಚಿಕೆ ಮತ್ತು ಡೀಅಲ್ಲೊಕೇಷನ್ಗೆ ಅನುಕೂಲ ಮಾಡಿಕೊಡುತ್ತವೆ; ಆದರೆ ಅವು ಹೆಚ್ಚು ಹೊಂದಿಕೊಳ್ಳುತ್ತವೆ, ಇದು ವಸ್ತುಗಳನ್ನು ನಿಗದಿಪಡಿಸಿದ ಸ್ಟ್ಯಾಕ್ ಫ್ರೇಮ್ಗಿಂತ ಹೆಚ್ಚು ಕಾಲ ಬದುಕಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ವಿಶಿಷ್ಟ ಅನುಷ್ಠಾನಗಳಲ್ಲಿ, ಒಂದು ಪ್ರದೇಶದ ಎಲ್ಲಾ ವಸ್ತುಗಳನ್ನು ಒಂದೇ ಪಕ್ಕದ ಶ್ರೇಣಿಯ ಮೆಮೊರಿ ವಿಳಾಸಗಳಲ್ಲಿ ಹಂಚಲಾಗುತ್ತದೆ, ಸ್ಟ್ಯಾಕ್ ಫ್ರೇಮ್ಗಳನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಹೇಗೆ ಹಂಚಲಾಗುತ್ತದೆ ಎಂಬುದರಂತೆಯೇ. ಒಂದು ಸರಳ ಉದಾಹರಣೆಯಾಗಿ, ಈ ಕೆಳಗಿನ ಸಿ ಕೋಡ್ ಅನ್ನು ಪರಿಗಣಿಸಿ, ಇದು ಲಿಂಕ್ ಮಾಡಲಾದ ಪಟ್ಟಿಯ ದತ್ತಾಂಶ ರಚನೆಯನ್ನು ನಿಯೋಜಿಸುತ್ತದೆ ಮತ್ತು ನಂತರ ನಿಯೋಜಿಸುವುದನ್ನು ರದ್ದುಗೊಳಿಸುತ್ತದೆಃ ಪ್ರದೇಶ * r = ಪ್ರದೇಶವನ್ನು ರಚಿಸಿ (); ಲಿಸ್ಟ್ ನೋಡ್ * ಹೆಡ್ = ಎನ್ ಯು ಎಲ್ ಎಲ್; (ಇಂಟ್ ಐ = 1; ಐ <= 1000; ಐ + +) {ಲಿಸ್ಟ್ ನೋಡ್ * ನ್ಯೂ ನೋಡ್ = ಪ್ರದೇಶದಿಂದ ನಿಯೋಜಿಸಿ (ಆರ್, ಸೈಝೋಫ್ (ಲಿಸ್ಟ್ ನೋಡ್)); ನ್ಯೂ ನೋಡ್-> ನೆಕ್ಸ್ಟ್ = ಹೆಡ್; ಹೆಡ್ = ನ್ಯೂ ನೋಡ್;}///(ಇಲ್ಲಿ ಪಟ್ಟಿಯನ್ನು ಬಳಸಿ)//.///. ಪ್ರದೇಶವನ್ನು ನಾಶಪಡಿಸಿ (ಆರ್); ಲಿಂಕ್ ಮಾಡಲಾದ ಪಟ್ಟಿಯನ್ನು ನಿರ್ಮಿಸಲು ಅನೇಕ ಕಾರ್ಯಾಚರಣೆಗಳ ಅಗತ್ಯವಿದ್ದರೂ, ಪ್ರದೇಶವನ್ನು ನಾಶಪಡಿಸುವ ಮೂಲಕ ಒಂದೇ ಕಾರ್ಯಾಚರಣೆಯಲ್ಲಿ ಅದನ್ನು ತ್ವರಿತವಾಗಿ ನಿಯೋಜಿಸಬಹುದು. ಪಟ್ಟಿಯನ್ನು ದಾಟುವ ಅಗತ್ಯವಿಲ್ಲ. ಸರಳ ಸ್ಪಷ್ಟ ಪ್ರದೇಶಗಳನ್ನು ಅನುಷ್ಠಾನಗೊಳಿಸುವುದು ಸರಳವಾಗಿದೆ; ಈ ಕೆಳಗಿನ ವಿವರಣೆಯು ಹ್ಯಾನ್ಸನ್ ಅವರ ಕಾರ್ಯವನ್ನು ಆಧರಿಸಿದೆ. ಪ್ರತಿಯೊಂದು ಪ್ರದೇಶವನ್ನು ಮೆಮೊರಿಯ ದೊಡ್ಡ ಬ್ಲಾಕ್ಗಳ ಲಿಂಕ್ ಮಾಡಲಾದ ಪಟ್ಟಿಯಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗಿದೆ; ಪ್ರತಿ ಬ್ಲಾಕ್ ಅನೇಕ ಹಂಚಿಕೆಗಳನ್ನು ಪೂರೈಸುವಷ್ಟು ದೊಡ್ಡದಾಗಿರಬೇಕು. ಪ್ರಸ್ತುತ ಬ್ಲಾಕ್ ಬ್ಲಾಕ್ನಲ್ಲಿನ ಮುಂದಿನ ಮುಕ್ತ ಸ್ಥಾನಕ್ಕೆ ಪಾಯಿಂಟರ್ ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ, ಮತ್ತು ಬ್ಲಾಕ್ ತುಂಬಿದರೆ, ಹೊಸದನ್ನು ಹಂಚಲಾಗುತ್ತದೆ ಮತ್ತು ಪಟ್ಟಿಗೆ ಸೇರಿಸಲಾಗುತ್ತದೆ. ಪ್ರದೇಶವನ್ನು ನಿಯೋಜಿಸಿದಾಗ, ಮುಂದಿನ-ಮುಕ್ತ-ಸ್ಥಾನದ ಪಾಯಿಂಟರ್ ಅನ್ನು ಮೊದಲ ಬ್ಲಾಕ್ನ ಪ್ರಾರಂಭಕ್ಕೆ ಮರುಹೊಂದಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಬ್ಲಾಕ್ಗಳ ಪಟ್ಟಿಯನ್ನು ಮುಂದಿನ ನಿಗದಿಪಡಿಸಿದ ಪ್ರದೇಶಕ್ಕೆ ಮರುಬಳಕೆ ಮಾಡಬಹುದು. ಪರ್ಯಾಯವಾಗಿ, ಒಂದು ಪ್ರದೇಶವನ್ನು ವಿಂಗಡಿಸಿದಾಗ, ಅದರ ಬ್ಲಾಕ್ಗಳ ಪಟ್ಟಿಯನ್ನು ಜಾಗತಿಕ ಫ್ರೀಲಿಸ್ಟ್ಗೆ ಸೇರಿಸಬಹುದು, ಅದರಿಂದ ಇತರ ಪ್ರದೇಶಗಳು ನಂತರ ಹೊಸ ಬ್ಲಾಕ್ಗಳನ್ನು ನಿಯೋಜಿಸಬಹುದು. ಈ ಸರಳ ಯೋಜನೆಯ ಎರಡೂ ಸಂದರ್ಭಗಳಲ್ಲಿ, ಪ್ರದೇಶಗಳಲ್ಲಿ ಪ್ರತ್ಯೇಕ ವಸ್ತುಗಳನ್ನು ನಿಯೋಜಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಈ ಯೋಜನೆಗೆ ನಿಗದಿಪಡಿಸಿದ ಪ್ರತಿ ಬೈಟ್ನ ಒಟ್ಟಾರೆ ವೆಚ್ಚವು ತುಂಬಾ ಕಡಿಮೆಯಾಗಿದೆ; ಬಹುತೇಕ ಎಲ್ಲಾ ಹಂಚಿಕೆಗಳು ಮುಂದಿನ-ಮುಕ್ತ-ಸ್ಥಾನದ ಪಾಯಿಂಟರ್ಗೆ ಹೋಲಿಕೆ ಮತ್ತು ನವೀಕರಣವನ್ನು ಮಾತ್ರ ಒಳಗೊಂಡಿರುತ್ತವೆ. ಒಂದು ಪ್ರದೇಶವನ್ನು ವಿಂಗಡಿಸುವುದು ಒಂದು ನಿರಂತರ-ಸಮಯದ ಕಾರ್ಯಾಚರಣೆಯಾಗಿದೆ, ಮತ್ತು ಇದನ್ನು ವಿರಳವಾಗಿ ಮಾಡಲಾಗುತ್ತದೆ. ಸಾಮಾನ್ಯ ಕಸ ಸಂಗ್ರಹಣಾ ವ್ಯವಸ್ಥೆಗಳಿಗಿಂತ ಭಿನ್ನವಾಗಿ, ದತ್ತಾಂಶವನ್ನು ಅದರ ಪ್ರಕಾರದೊಂದಿಗೆ ಟ್ಯಾಗ್ ಮಾಡುವ ಅಗತ್ಯವಿಲ್ಲ. ಇತಿಹಾಸ ಮತ್ತು ಪರಿಕಲ್ಪನೆಗಳು ಪ್ರದೇಶಗಳ ಮೂಲಭೂತ ಪರಿಕಲ್ಪನೆಯು ಬಹಳ ಹಳೆಯದಾಗಿದೆ, ಮೊದಲ ಬಾರಿಗೆ 1967ರಷ್ಟು ಹಿಂದೆಯೇ ಡೌಗ್ಲಾಸ್ ಟಿ. ರಾಸ್ನ ಎಇಡಿ ಫ್ರೀ ಸ್ಟೋರೇಜ್ ಪ್ಯಾಕೇಜ್ನಲ್ಲಿ ಕಾಣಿಸಿಕೊಂಡಿತ್ತು, ಇದರಲ್ಲಿ ಸ್ಮರಣೆಯನ್ನು ವಲಯಗಳ ಶ್ರೇಣಿಯಾಗಿ ವಿಂಗಡಿಸಲಾಗಿತ್ತು; ಪ್ರತಿ ವಲಯವು ತನ್ನದೇ ಆದ ಹಂಚಿಕೆಯನ್ನು ಹೊಂದಿತ್ತು, ಮತ್ತು ಒಂದು ವಲಯವನ್ನು ಒಮ್ಮೆಲೆ ಮುಕ್ತಗೊಳಿಸಬಹುದಾಗಿತ್ತು, ಇದು ವಲಯಗಳನ್ನು ಪ್ರದೇಶಗಳಾಗಿ ಬಳಸಬಹುದಾಗಿತ್ತು. 1976ರಲ್ಲಿ, ಪಿಎಲ್/ಐ ಮಾನದಂಡವು ಎಆರ್ಇಎ ದತ್ತಾಂಶ ಪ್ರಕಾರವನ್ನು ಒಳಗೊಂಡಿತ್ತು. 1990 ರಲ್ಲಿ, ಹ್ಯಾನ್ಸನ್ ಅವರು ಸಿ ಯಲ್ಲಿನ ಸ್ಪಷ್ಟ ಪ್ರದೇಶಗಳು (ಇದನ್ನು ಅವರು ಅರೆನಾಸ್ ಎಂದು ಕರೆದರು) ನಿಗದಿಪಡಿಸಿದ ಬೈಟ್ಗೆ ಸಮಯದ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸಾಧಿಸಬಹುದು ಎಂದು ಪ್ರದರ್ಶಿಸಿದರು, ಇದು ಅತ್ಯಂತ ವೇಗವಾಗಿ ತಿಳಿದಿರುವ ರಾಶಿ ಹಂಚಿಕೆ ಕಾರ್ಯವಿಧಾನಕ್ಕಿಂತಲೂ ಉತ್ತಮವಾಗಿದೆ. ಪೂಲ್ಗಳು ಎಂದು ಕರೆಯುವ ಅಪಾಚೆ ಎಚ್. ಟಿ. ಟಿ. ಪಿ. ಸರ್ವರ್ ಮತ್ತು ಅವುಗಳನ್ನು ಮೆಮೊರಿ ಸಂದರ್ಭಗಳು ಎಂದು ಕರೆಯುವ ಪೋಸ್ಟ್ಗ್ರೆಎಸ್ಕ್ಯೂಎಲ್ ಡೇಟಾಬೇಸ್ ನಿರ್ವಹಣಾ ವ್ಯವಸ್ಥೆ ಸೇರಿದಂತೆ ಕೆಲವು ಆರಂಭಿಕ ಸಿ-ಆಧಾರಿತ ಸಾಫ್ಟ್ವೇರ್ ಯೋಜನೆಗಳ ವಿನ್ಯಾಸದಲ್ಲಿ ಸ್ಪಷ್ಟ ಪ್ರದೇಶಗಳು ಪ್ರಮುಖ ಪಾತ್ರ ವಹಿಸಿದವು. ಸಾಂಪ್ರದಾಯಿಕ ರಾಶಿ ಹಂಚಿಕೆಯಂತೆ, ಈ ಯೋಜನೆಗಳು ಮೆಮೊರಿ ಸುರಕ್ಷತೆಯನ್ನು ಒದಗಿಸುವುದಿಲ್ಲ; ಪ್ರೋಗ್ರಾಮರ್ ಒಂದು ಪ್ರದೇಶವನ್ನು ತೂಗಾಡುತ್ತಿರುವ ಪಾಯಿಂಟರ್ ಮೂಲಕ ನಿಯೋಜಿಸಿದ ನಂತರ ಅದನ್ನು ಪ್ರವೇಶಿಸಲು ಅಥವಾ ಪ್ರದೇಶವನ್ನು ನಿಯೋಜಿಸಲು ಮರೆಯಲು ಸಾಧ್ಯವಿದೆ, ಇದು ಮೆಮೊರಿ ಸೋರಿಕೆಗೆ ಕಾರಣವಾಗುತ್ತದೆ. 1988 ರಲ್ಲಿ, ಸಂಶೋಧಕರು ಪ್ರದೇಶದ ತೀರ್ಮಾನದ ಪರಿಕಲ್ಪನೆಯನ್ನು ಪರಿಚಯಿಸುವ ಮೂಲಕ ಸುರಕ್ಷಿತ ಮೆಮೊರಿ ಹಂಚಿಕೆಗಾಗಿ ಪ್ರದೇಶಗಳನ್ನು ಹೇಗೆ ಬಳಸುವುದು ಎಂಬುದನ್ನು ತನಿಖೆ ಮಾಡಲು ಪ್ರಾರಂಭಿಸಿದರು, ಅಲ್ಲಿ ಪ್ರದೇಶಗಳ ರಚನೆ ಮತ್ತು ವಿಂಗಡಣೆ, ಜೊತೆಗೆ ನಿರ್ದಿಷ್ಟ ಪ್ರದೇಶಗಳಿಗೆ ಪ್ರತ್ಯೇಕ ಸ್ಥಿರ ಹಂಚಿಕೆಯ ಅಭಿವ್ಯಕ್ತಿಗಳ ನಿಯೋಜನೆಯನ್ನು ಕಂಪೈಲರ್ ಸಂಕಲನ ಸಮಯದಲ್ಲಿ ಸೇರಿಸಲಾಗುತ್ತದೆ. ತೂಗಾಡುತ್ತಿರುವ ಪಾಯಿಂಟರ್ಗಳು ಮತ್ತು ಸೋರಿಕೆಗಳು ಸಂಭವಿಸುವುದಿಲ್ಲ ಎಂದು ಖಾತರಿಪಡಿಸುವ ರೀತಿಯಲ್ಲಿ ಕಂಪೈಲರ್ ಇದನ್ನು ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. ರುಗ್ಗಿಯೇರಿ ಮತ್ತು ಮುರ್ತಾಗ್ ಅವರ ಆರಂಭಿಕ ಕೃತಿಯಲ್ಲಿ, ಪ್ರತಿ ಕಾರ್ಯದ ಆರಂಭದಲ್ಲಿ ಒಂದು ಪ್ರದೇಶವನ್ನು ರಚಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಕೊನೆಯಲ್ಲಿ ವಿಂಗಡಿಸಲಾಗುತ್ತದೆ. ನಂತರ ಅವರು ಪ್ರತಿ ಸ್ಥಿರ ಹಂಚಿಕೆಯ ಅಭಿವ್ಯಕ್ತಿಯ ಜೀವಿತಾವಧಿಯನ್ನು ನಿರ್ಧರಿಸಲು ದತ್ತಾಂಶ ಹರಿವಿನ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಬಳಸುತ್ತಾರೆ ಮತ್ತು ಅದನ್ನು ಅದರ ಸಂಪೂರ್ಣ ಜೀವಿತಾವಧಿಯನ್ನು ಒಳಗೊಂಡಿರುವ ಕಿರಿಯ ಪ್ರದೇಶಕ್ಕೆ ನಿಯೋಜಿಸುತ್ತಾರೆ. 1994 ರಲ್ಲಿ, ಈ ಕೆಲಸವನ್ನು ಟೋಫ್ಟೆ ಮತ್ತು ಟಾಲ್ಪಿನ್ ಅವರು ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಎಂಎಲ್ನಲ್ಲಿ ಪ್ರಕಾರದ ಬಹುರೂಪತೆ ಮತ್ತು ಉನ್ನತ-ಕ್ರಮಾಂಕದ ಕಾರ್ಯಗಳನ್ನು ಬೆಂಬಲಿಸಲು ಮೂಲಭೂತ ಕೃತಿಯಲ್ಲಿ ಸಾಮಾನ್ಯೀಕರಿಸಿದರು, ಇದು ಕ್ರಿಯಾತ್ಮಕ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಯಾಗಿದ್ದು, ಪ್ರಕಾರದ ತೀರ್ಮಾನ ಮತ್ತು ಬಹುರೂಪದ ಪ್ರದೇಶದ ಪ್ರಕಾರಗಳು ಮತ್ತು ಪ್ರದೇಶದ ಕಲನಶಾಸ್ತ್ರದ ಸೈದ್ಧಾಂತಿಕ ಪರಿಕಲ್ಪನೆಗಳ ಆಧಾರದ ಮೇಲೆ ವಿಭಿನ್ನ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ಅವರ ಕೆಲಸವು ಪ್ರದೇಶಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ಲ್ಯಾಂಬ್ಡಾ ಕಲನಶಾಸ್ತ್ರದ ವಿಸ್ತರಣೆಯನ್ನು ಪರಿಚಯಿಸಿತು, ಎರಡು ರಚನೆಗಳನ್ನು ಸೇರಿಸಿತುಃ ρ ನಲ್ಲಿ e1: ಅಭಿವ್ಯಕ್ತಿಯ e1 ಫಲಿತಾಂಶವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಿ ಮತ್ತು ಅದನ್ನು ಪ್ರದೇಶದಲ್ಲಿ ಸಂಗ್ರಹಿಸಿ; e2 ತುದಿಯಲ್ಲಿ ಲೆಟ್ರಿಜನ್ ρ: ಒಂದು ಪ್ರದೇಶವನ್ನು ರಚಿಸಿ ಅದನ್ನು ρ ಗೆ ಬಂಧಿಸಿ; e2 ಅನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ; ನಂತರ ಪ್ರದೇಶವನ್ನು ನಿಯೋಜಿಸಿ. ಈ ವಾಕ್ಯರಚನೆಯ ರಚನೆಯಿಂದಾಗಿ, ಪ್ರದೇಶಗಳನ್ನು ನೆಸ್ಟೆಡ್ ಮಾಡಲಾಗುತ್ತದೆ, ಅಂದರೆ r1 ನ ನಂತರ r2 ಅನ್ನು ರಚಿಸಿದರೆ, ಅದನ್ನು r1 ಗಿಂತ ಮೊದಲು ವಿಂಗಡಿಸಬೇಕು; ಇದರ ಫಲಿತಾಂಶವು ಪ್ರದೇಶಗಳ ರಾಶಿಯಾಗಿದೆ. ಇದಲ್ಲದೆ, ಪ್ರದೇಶಗಳನ್ನು ಅವುಗಳನ್ನು ರಚಿಸಿದ ಅದೇ ಕಾರ್ಯದಲ್ಲಿ ವಿಂಗಡಿಸಬೇಕು. ಐಕೆನ್ ಮತ್ತು ಇತರರು ಈ ನಿರ್ಬಂಧಗಳನ್ನು ಸಡಿಲಗೊಳಿಸಿದರು. ಈ ವಿಸ್ತೃತ ಲ್ಯಾಂಬ್ಡಾ ಕಲನಶಾಸ್ತ್ರವು ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಎಂಎಲ್ ಪ್ರೋಗ್ರಾಂಗಳನ್ನು ಯಂತ್ರ ಸಂಕೇತವಾಗಿ ಸಂಕಲಿಸಲು ಸಮರ್ಥನೀಯವಾಗಿ ಮೆಮೊರಿ-ಸುರಕ್ಷಿತ ಮಧ್ಯಂತರ ಪ್ರಾತಿನಿಧ್ಯವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಉದ್ದೇಶವನ್ನು ಹೊಂದಿತ್ತು, ಆದರೆ ದೊಡ್ಡ ಪ್ರೋಗ್ರಾಂಗಳಲ್ಲಿ ಉತ್ತಮ ಫಲಿತಾಂಶಗಳನ್ನು ನೀಡುವ ಭಾಷಾಂತರಕಾರರನ್ನು ನಿರ್ಮಿಸುವುದು ಹಲವಾರು ಪ್ರಾಯೋಗಿಕ ಮಿತಿಗಳನ್ನು ಎದುರಿಸಿತು, ಇದನ್ನು ಹೊಸ ವಿಶ್ಲೇಷಣೆಗಳೊಂದಿಗೆ ಪರಿಹರಿಸಬೇಕಾಯಿತು, ಇದರಲ್ಲಿ ಪುನರಾವರ್ತಿತ ಕರೆಗಳು, ಟೈಲ್ ಕರೆಗಳು ಮತ್ತು ಒಂದೇ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿರುವ ಪ್ರದೇಶಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದು ಸೇರಿದೆ. ಈ ಕೆಲಸವನ್ನು 1995ರಲ್ಲಿ ಪೂರ್ಣಗೊಳಿಸಲಾಯಿತು ಮತ್ತು ಕಸ ಸಂಗ್ರಹಣೆಯ ಬದಲಿಗೆ ಪ್ರದೇಶ ಹಂಚಿಕೆಯನ್ನು ಆಧರಿಸಿದ ಎಂಎಲ್ನ ಆವೃತ್ತಿಯಾದ ಎಂಎಲ್ ಕಿಟ್ನಲ್ಲಿ ಸಂಯೋಜಿಸಲಾಯಿತು. ಇದು ಮಧ್ಯಮ ಗಾತ್ರದ ಪರೀಕ್ಷಾ ಕಾರ್ಯಕ್ರಮಗಳಲ್ಲಿ ಇವೆರಡರ ನಡುವೆ ನೇರ ಹೋಲಿಕೆಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಟ್ಟಿತು, ಪ್ರೋಗ್ರಾಂ ಎಷ್ಟು "ಪ್ರದೇಶ-ಸ್ನೇಹಿ" ಎಂಬುದರ ಆಧಾರದ ಮೇಲೆ ವ್ಯಾಪಕವಾಗಿ ಬದಲಾಗುವ ಫಲಿತಾಂಶಗಳನ್ನು ನೀಡಿತು ("10 ಪಟ್ಟು ವೇಗವಾಗಿ ಮತ್ತು ನಾಲ್ಕು ಪಟ್ಟು ನಿಧಾನವಾಗಿ"); ಸಂಕಲನ ಸಮಯಗಳು, ಆದಾಗ್ಯೂ, ನಿಮಿಷಗಳ ಕ್ರಮದಲ್ಲಿವೆ. ಎಂಎಲ್ ಕಿಟ್ ಅನ್ನು ಅಂತಿಮವಾಗಿ ಎರಡು ಸೇರ್ಪಡೆಗಳೊಂದಿಗೆ ದೊಡ್ಡ ಅನ್ವಯಗಳಿಗೆ ಅಳೆಯಲಾಯಿತುಃ ಮಾಡ್ಯೂಲ್ಗಳ ಪ್ರತ್ಯೇಕ ಸಂಕಲನಕ್ಕಾಗಿ ಒಂದು ಯೋಜನೆ, ಮತ್ತು ಪ್ರದೇಶದ ತೀರ್ಮಾನವನ್ನು ಟ್ರ್ಯಾಕಿಂಗ್ ಕಸ ಸಂಗ್ರಹಣೆಯೊಂದಿಗೆ ಸಂಯೋಜಿಸುವ ಹೈಬ್ರಿಡ್ ತಂತ್ರ. ಎಂಎಲ್ ಕಿಟ್ನ ಅಭಿವೃದ್ಧಿಯ ನಂತರ, ಪ್ರದೇಶಗಳನ್ನು ಇತರ ಭಾಷಾ ಪರಿಸರಗಳಿಗೆ ಸಾಮಾನ್ಯೀಕರಿಸಲು ಪ್ರಾರಂಭಿಸಲಾಯಿತುಃ ಸಿ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಗೆ ವಿವಿಧ ವಿಸ್ತರಣೆಗಳುಃ ಸುರಕ್ಷಿತ ಸಿ ಉಪಭಾಷೆ ಚಂಡಮಾರುತ, ಇದು ಇತರ ಅನೇಕ ವೈಶಿಷ್ಟ್ಯಗಳ ನಡುವೆ ಸ್ಪಷ್ಟ ಪ್ರದೇಶಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸುತ್ತದೆ ಮತ್ತು ಅವುಗಳನ್ನು ಬಳಸಲು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಸಿ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸುವ ಪರಿಣಾಮವನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡುತ್ತದೆ. ಆರ್ಸಿ ಎಂದು ಕರೆಯಲ್ಪಡುವ ಸಿ ಗೆ ವಿಸ್ತರಣೆಯನ್ನು ಜಾರಿಗೆ ತರಲಾಯಿತು, ಅದು ಸ್ಪಷ್ಟವಾಗಿ ನಿರ್ವಹಿಸಲ್ಪಟ್ಟ ಪ್ರದೇಶಗಳನ್ನು ಬಳಸುತ್ತದೆ, ಆದರೆ ಯಾವುದೇ ಪ್ರದೇಶವನ್ನು ಅಕಾಲಿಕವಾಗಿ ಬಿಡುಗಡೆ ಮಾಡಲಾಗುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವ ಮೂಲಕ ಮೆಮೊರಿ ಸುರಕ್ಷತೆಯನ್ನು ಖಾತರಿಪಡಿಸಿಕೊಳ್ಳಲು ಪ್ರದೇಶಗಳ ಮೇಲೆ ಉಲ್ಲೇಖ ಎಣಿಕೆಯನ್ನು ಸಹ ಬಳಸುತ್ತದೆ. ಪ್ರದೇಶಗಳು ಉಲ್ಲೇಖ ಎಣಿಕೆಯ ಓವರ್ಹೆಡ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತವೆ, ಏಕೆಂದರೆ ಪ್ರದೇಶಗಳ ಆಂತರಿಕ ಉಲ್ಲೇಖಗಳನ್ನು ಮಾರ್ಪಡಿಸಿದಾಗ ಎಣಿಕೆಗಳನ್ನು ನವೀಕರಿಸುವ ಅಗತ್ಯವಿಲ್ಲ. ಆರ್. ಸಿ. ಯು ಕೆಲವು ಉಲ್ಲೇಖ ಎಣಿಕೆ ನವೀಕರಣಗಳನ್ನು ತೆಗೆದುಹಾಕಲು ಅನುವು ಮಾಡಿಕೊಡುವ ಪ್ರದೇಶಗಳಿಗೆ ಸ್ಪಷ್ಟವಾದ ಸ್ಥಿರ ಪ್ರಕಾರದ ವ್ಯವಸ್ಥೆಯನ್ನು ಒಳಗೊಂಡಿದೆ. ನಿಯಂತ್ರಣ-ಸಿ ಎಂದು ಕರೆಯಲ್ಪಡುವ ಸಿ ನಿರ್ಬಂಧವು ಮೆಮೊರಿ ಸುರಕ್ಷತೆಯನ್ನು ಸ್ಥಿರವಾಗಿ ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಅದರ ವಿನ್ಯಾಸದ ಭಾಗವಾಗಿ ಪ್ರದೇಶಗಳನ್ನು ಬಳಸಲು (ಮತ್ತು ಒಂದು ಸಮಯದಲ್ಲಿ ಒಂದೇ ಪ್ರದೇಶವನ್ನು ಮಾತ್ರ) ಪ್ರೋಗ್ರಾಂಗಳನ್ನು ಮಿತಿಗೊಳಿಸುತ್ತದೆ. ಪ್ರದೇಶಗಳನ್ನು ಜಾವಾದ ಉಪಗುಂಪಿಗಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಯಿತು ಮತ್ತು ನೈಜ ಸಮಯದ ಜಾವಾದಲ್ಲಿ ಮೆಮೊರಿ ನಿರ್ವಹಣೆಯ ನಿರ್ಣಾಯಕ ಅಂಶವಾಯಿತು, ಇದು ಅವುಗಳನ್ನು ಒಡೆತನದ ಪ್ರಕಾರಗಳೊಂದಿಗೆ ಸಂಯೋಜಿಸಿ ಆಬ್ಜೆಕ್ಟ್ ಎನ್ಕ್ಯಾಪ್ಸುಲೇಷನ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ ಮತ್ತು ಪ್ರದೇಶದ ಡೀಲ್ಲೊಕೇಷನ್ನಲ್ಲಿ ರನ್ಟೈಮ್ ಚೆಕ್ಗಳನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ. ತೀರಾ ಇತ್ತೀಚೆಗೆ, ಸಂಯೋಜಿತ ನೈಜ-ಸಮಯದ ಜಾವಾ ಅನ್ವಯಿಕೆಗಳಲ್ಲಿ ಪ್ರದೇಶಗಳನ್ನು ಊಹಿಸಲು ಅರೆ-ಸ್ವಯಂಚಾಲಿತ ವ್ಯವಸ್ಥೆಯನ್ನು ಪ್ರಸ್ತಾಪಿಸಲಾಯಿತು, ಸಂಕಲನ-ಸಮಯದ ಸ್ಥಿರ ವಿಶ್ಲೇಷಣೆ, ರನ್ಟೈಮ್ ಪ್ರದೇಶದ ಹಂಚಿಕೆ ನೀತಿ ಮತ್ತು ಪ್ರೋಗ್ರಾಮರ್ ಸುಳಿವುಗಳನ್ನು ಸಂಯೋಜಿಸಲಾಗಿದೆ. ಪ್ರದೇಶಗಳು ನೈಜ-ಸಮಯದ ಗಣನೆಗೆ ಸೂಕ್ತವಾಗಿವೆ ಏಕೆಂದರೆ ಅವುಗಳ ಸಮಯದ ಓವರ್ಹೆಡ್ ಅನ್ನು ಸ್ಥಿರವಾಗಿ ಊಹಿಸಬಹುದು, ಹೆಚ್ಚುತ್ತಿರುವ ಕಸ ಸಂಗ್ರಹಣೆಯ ಸಂಕೀರ್ಣತೆ ಇಲ್ಲ. ಬ್ಯಾಕ್ಟ್ರಾಕ್ಕಿಂಗ್ ಮತ್ತು ಕಡಿತಗಳನ್ನು ಬೆಂಬಲಿಸಲು ಟೋಫ್ಟೆ ಮತ್ತು ಟಾಲ್ಪಿನ್ನ ಪ್ರದೇಶದ ತೀರ್ಮಾನ ಮಾದರಿಯನ್ನು ವಿಸ್ತರಿಸುವ ಮೂಲಕ ತರ್ಕ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಗಳಾದ ಪ್ರೋಲಾಗ್ ಮತ್ತು ಮರ್ಕ್ಯುರಿಗಾಗಿ ಅವುಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಯಿತು. ಪ್ರದೇಶ-ಆಧಾರಿತ ಶೇಖರಣಾ ನಿರ್ವಹಣೆಯನ್ನು ಸಮಾನಾಂತರ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಯ ಪ್ಯಾರಾಸೈಲ್ನಾದ್ಯಂತ ಬಳಸಲಾಗುತ್ತದೆ. ಪ್ಯಾರಾಸೈಲ್ನಲ್ಲಿ ಸ್ಪಷ್ಟವಾದ ಪಾಯಿಂಟರ್ಗಳ ಕೊರತೆಯಿಂದಾಗಿ, ಉಲ್ಲೇಖ ಎಣಿಕೆಯ ಅಗತ್ಯವಿಲ್ಲ. ಅನಾನುಕೂಲಗಳು ಪ್ರದೇಶಗಳನ್ನು ಬಳಸುವ ವ್ಯವಸ್ಥೆಗಳು ಪ್ರದೇಶಗಳನ್ನು ವಿಂಗಡಿಸುವ ಮೊದಲು ಪ್ರದೇಶಗಳು ಬಹಳ ದೊಡ್ಡದಾಗುತ್ತವೆ ಮತ್ತು ಹೆಚ್ಚಿನ ಪ್ರಮಾಣದಲ್ಲಿ ಡೆಡ್ ಡೇಟಾವನ್ನು ಹೊಂದಿರುವ ಸಮಸ್ಯೆಗಳನ್ನು ಅನುಭವಿಸಬಹುದು; ಇವುಗಳನ್ನು ಸಾಮಾನ್ಯವಾಗಿ "ಸೋರಿಕೆಗಳು" ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ (ಅಂತಿಮವಾಗಿ ಅವುಗಳನ್ನು ಬಿಡುಗಡೆ ಮಾಡಲಾಗಿದ್ದರೂ ಸಹ). ಸೋರಿಕೆಯನ್ನು ತೆಗೆದುಹಾಕುವುದು ಸಾಮಾನ್ಯವಾಗಿ ಹೊಸ, ಕಡಿಮೆ-ಜೀವಿತಾವಧಿಯ ಪ್ರದೇಶಗಳನ್ನು ಪರಿಚಯಿಸುವ ಮೂಲಕ ಕಾರ್ಯಕ್ರಮವನ್ನು ಪುನರ್ರಚಿಸುವುದನ್ನು ಒಳಗೊಂಡಿರಬಹುದು. ಈ ರೀತಿಯ ಸಮಸ್ಯೆಯನ್ನು ಡೀಬಗ್ ಮಾಡುವುದು ಪ್ರದೇಶದ ತೀರ್ಮಾನವನ್ನು ಬಳಸುವ ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ ವಿಶೇಷವಾಗಿ ಕಷ್ಟಕರವಾಗಿದೆ, ಅಲ್ಲಿ ಪ್ರೋಗ್ರಾಮರ್ ಆಧಾರವಾಗಿರುವ ತೀರ್ಮಾನ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕು, ಅಥವಾ ಸಮಸ್ಯೆಯನ್ನು ಪತ್ತೆಹಚ್ಚಲು ವರ್ಬೋಸ್ ಮಧ್ಯಂತರ ಪ್ರಾತಿನಿಧ್ಯವನ್ನು ಪರೀಕ್ಷಿಸಬೇಕು. ತ್ಯಾಜ್ಯ ಸಂಗ್ರಹಕಾರರನ್ನು ಪತ್ತೆಹಚ್ಚುವುದು ಕಾರ್ಯಕ್ರಮದ ಬದಲಾವಣೆಗಳಿಲ್ಲದೆ ಈ ರೀತಿಯ ದತ್ತಾಂಶವನ್ನು ಸಕಾಲಿಕವಾಗಿ ಹಂಚುವಲ್ಲಿ ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಿದೆ; ಇದು ಹೈಬ್ರಿಡ್ ಪ್ರದೇಶ/ಜಿಸಿ ವ್ಯವಸ್ಥೆಗಳಿಗೆ ಒಂದು ಸಮರ್ಥನೆಯಾಗಿದೆ. ಮತ್ತೊಂದೆಡೆ, ಮತ್ತೆ ಎಂದಿಗೂ ಬಳಸಲಾಗದ ದತ್ತಾಂಶಕ್ಕೆ ಉಲ್ಲೇಖಗಳನ್ನು ಉಳಿಸಿಕೊಂಡರೆ, ಕಸ ಸಂಗ್ರಹಕಾರರನ್ನು ಪತ್ತೆಹಚ್ಚುವುದು ಸೂಕ್ಷ್ಮ ಸೋರಿಕೆಯನ್ನು ಸಹ ಪ್ರದರ್ಶಿಸಬಹುದು. ಪ್ರದೇಶಗಳ ಸಂಖ್ಯೆಯು ತುಲನಾತ್ಮಕವಾಗಿ ಚಿಕ್ಕದಾಗಿದ್ದಾಗ ಮತ್ತು ಪ್ರತಿಯೊಂದೂ ಅನೇಕ ವಸ್ತುಗಳನ್ನು ಹೊಂದಿರುವಾಗ ಪ್ರದೇಶ-ಆಧಾರಿತ ಮೆಮೊರಿ ನಿರ್ವಹಣೆಯು ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ; ಅನೇಕ ವಿರಳ ಪ್ರದೇಶಗಳನ್ನು ಹೊಂದಿರುವ ಪ್ರೋಗ್ರಾಂಗಳು ಆಂತರಿಕ ವಿಘಟನೆಯನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತವೆ, ಇದು ವ್ಯರ್ಥವಾದ ಮೆಮೊರಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ ಮತ್ತು ಪ್ರದೇಶದ ನಿರ್ವಹಣೆಗೆ ಸಮಯವನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ. ಮತ್ತೆ, ಪ್ರದೇಶದ ತೀರ್ಮಾನದ ಉಪಸ್ಥಿತಿಯಲ್ಲಿ ಈ ಸಮಸ್ಯೆಯನ್ನು ಪತ್ತೆಹಚ್ಚುವುದು ಹೆಚ್ಚು ಕಷ್ಟಕರವಾಗಿರುತ್ತದೆ. ಹೈಬ್ರಿಡ್ ವಿಧಾನಗಳು ಮೇಲೆ ತಿಳಿಸಿದಂತೆ, ಆರ್ಸಿ ಪ್ರದೇಶಗಳು ಮತ್ತು ಉಲ್ಲೇಖ ಎಣಿಕೆಯ ಹೈಬ್ರಿಡ್ ಅನ್ನು ಬಳಸುತ್ತದೆ, ಇದು ಉಲ್ಲೇಖ ಎಣಿಕೆಯ ಓವರ್ಹೆಡ್ ಅನ್ನು ಸೀಮಿತಗೊಳಿಸುತ್ತದೆ ಏಕೆಂದರೆ ಪ್ರದೇಶಗಳ ಆಂತರಿಕ ಉಲ್ಲೇಖಗಳಿಗೆ ಅವುಗಳನ್ನು ಮಾರ್ಪಡಿಸಿದಾಗ ಎಣಿಕೆಗಳನ್ನು ನವೀಕರಿಸುವ ಅಗತ್ಯವಿಲ್ಲ. ಅಂತೆಯೇ, ಕೆಲವು ಗುರುತು-ಪ್ರದೇಶದ ಮಿಶ್ರ ವಿಧಾನಗಳು ಪ್ರದೇಶಗಳೊಂದಿಗೆ ಕಸ ಸಂಗ್ರಹವನ್ನು ಪತ್ತೆಹಚ್ಚುವಿಕೆಯನ್ನು ಸಂಯೋಜಿಸುತ್ತವೆ; ರಾಶಿಗಳನ್ನು ಪ್ರದೇಶಗಳಾಗಿ ವಿಭಜಿಸುವ ಮೂಲಕ, ಜೀವಂತ ವಸ್ತುಗಳನ್ನು ಹೊಂದಿರುವ ಯಾವುದೇ ಪ್ರದೇಶಗಳನ್ನು ಗುರುತಿಸುವ ಗುರುತು-ಸ್ವೀಪ್ ಪಾಸ್ ಅನ್ನು ನಿರ್ವಹಿಸುವ ಮೂಲಕ ಮತ್ತು ನಂತರ ಯಾವುದೇ ಗುರುತು ಹಾಕದ ಪ್ರದೇಶಗಳನ್ನು ಮುಕ್ತಗೊಳಿಸುವ ಮೂಲಕ ಇವು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ. ಇವುಗಳು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಉಳಿಯಲು ನಿರಂತರ ಡಿಫ್ರಾಗ್ಮೆಂಟೇಶನ್ ಅಗತ್ಯವಿರುತ್ತದೆ. ಉಲ್ಲೇಖಗಳ ಮೆಮೊರಿ ನಿರ್ವಹಣೆ