Hacker News

ପ୍ରଥମ C ++ (m) ଆବଣ୍ଟନ ସର୍ବଦା 72 KB କାହିଁକି?

ମନ୍ତବ୍ୟଗୁଡିକ

1 min read Via joelsiks.com

Mewayz Team

Editorial Team

Hacker News

ଆପଣଙ୍କର ପ୍ରଥମ C ++ ଆବଣ୍ଟନ ପଛରେ ରହସ୍ୟ |

ଆପଣ ଏକ ସରଳ C ++ ପ୍ରୋଗ୍ରାମ୍ ଲେଖନ୍ତି | ଗୋଟିଏ ନୂତନ int | ଚାରି ବାଇଟ୍ | ଆପଣ ଷ୍ଟ୍ରେସ୍ କିମ୍ବା ଆପଣଙ୍କର ପ୍ରିୟ ମେମୋରୀ ପ୍ରୋଫାଇଲର୍ ଫାୟାର୍ କରନ୍ତି, ଏବଂ ସେଠାରେ ଅଛି - ଆପଣଙ୍କର ପ୍ରକ୍ରିୟା କେବଳ ଅପରେଟିଂ ସିଷ୍ଟମରୁ ପ୍ରାୟ 72 KB ଅନୁରୋଧ କରିଛି | 4 ବାଇଟ୍ ନୁହେଁ | 64 ବାଇଟ୍ ନୁହେଁ | ଏକ ସମ୍ପୂର୍ଣ୍ଣ 72 KB ଯଦି ତୁମେ କେବେ ସେହି ନମ୍ବରକୁ ଅନାଇଛ ଏବଂ ଚିନ୍ତା କରିଛ ଯେ ତୁମର ସାଧନ ତୁମକୁ ମିଛ କହୁଛି, ତୁମେ ଏକା ନୁହଁ | ପ୍ରଥମ ଥର ପାଇଁ ମେମୋରୀ ଇଣ୍ଟର୍ନାଲ୍ ଖୋଳୁଥିବା C ++ ଡେଭଲପର୍ମାନଙ୍କ ମଧ୍ୟରେ ଏହି ବାରମ୍ବାର ଦେଖାଯାଉଥିବା ବିଚିତ୍ର ଆଚରଣ ମଧ୍ୟରୁ ଗୋଟିଏ ହେଉଛି, ଏବଂ ଉତ୍ତର ଆମ କୋଡ୍ ଏବଂ ପ୍ରକୃତ ହାର୍ଡୱେର୍ ମଧ୍ୟରେ ବସିଥିବା ସ୍ତରଗୁଡିକ ମାଧ୍ୟମରେ ଆମକୁ ଏକ ଆକର୍ଷଣୀୟ ଯାତ୍ରା କରିଥାଏ |

ଯେତେବେଳେ ଆପଣ ନୂତନ

କୁ ଡାକନ୍ତି କ’ଣ ହୁଏ |

72 KB ଚିତ୍ର ବୁ understand ିବାକୁ, ଆପଣଙ୍କୁ ସମ୍ପୂର୍ଣ୍ଣ ଆବଣ୍ଟନ ଶୃଙ୍ଖଳା ଖୋଜିବାକୁ ପଡିବ | ଯେତେବେଳେ ଆପଣଙ୍କର C ++ କୋଡ୍ ନୂତନ int କୁ ଏକଜେକ୍ୟୁଟ୍ କରେ, କମ୍ପାଇଲର୍ ଏହାକୁ ଅପରେଟର୍ ନୂତନ କୁ ଏକ କଲ୍ ରେ ଅନୁବାଦ କରେ, ଯାହାକି ଅଧିକାଂଶ ଲିନକ୍ସ ସିଷ୍ଟମରେ ଗ୍ଲିବ୍କରୁ ମଲୋକ କୁ ପ୍ରତିନିଧିତ୍। କରିଥାଏ | କିନ୍ତୁ ମଲୋକ କର୍ଣ୍ଣଲକୁ 4 ବାଇଟ୍ ସ୍ମୃତି ପାଇଁ ସିଧାସଳଖ ପଚାରନ୍ତି ନାହିଁ | କର୍ଣ୍ଣଲ ପୃଷ୍ଠାଗୁଡ଼ିକରେ କାର୍ଯ୍ୟ କରିଥାଏ - ସାଧାରଣତ x x86_64 ରେ 4 KB - ଏବଂ ଏକ ସରଳ ମେମୋରୀ ଆକ୍ସେସ୍ ସହିତ ସିଷ୍ଟମ୍ କଲ୍ ର ମୂଲ୍ୟ ବହୁତ ଅଟେ | ପ୍ରତ୍ୟେକ ବ୍ୟକ୍ତିଗତ ଆବଣ୍ଟନ ପାଇଁ brk () କିମ୍ବା mmap () କୁ କଲ କରିବା ଦ୍ any ାରା କ -ଣସି ଅଣ-ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ କାର୍ଯ୍ୟକ୍ରମ ବନ୍ଦ ହୋଇଯିବ।

ଏହା ପରିବର୍ତ୍ତେ, glibc ର ମେମୋରୀ ବଣ୍ଟନକାରୀ - ptmalloc2 ନାମକ ଏକ ପ୍ରୟୋଗ, ନିଜେ ଡଗ୍ ଲିଆର କ୍ଲାସିକ୍ dlmalloc ରୁ ଆସିଥିଲା - ମଧ୍ୟସ୍ଥି ଭାବରେ କାର୍ଯ୍ୟ କରେ | ଏହା କର୍ଣ୍ଣଲ ଉପରମୁଣ୍ଡରୁ ସ୍ମୃତିର ବଡ଼ ବ୍ଲକଗୁଡିକ ଅନୁରୋଧ କରେ, ତାପରେ ସେଗୁଡିକୁ ଛୋଟ ଛୋଟ ଖଣ୍ଡରେ ଖୋଦେଇ କରେ ଯେହେତୁ ତୁମର ପ୍ରୋଗ୍ରାମ ଆବଶ୍ୟକ କରେ | ଏହା ହେଉଛି ଆପଣଙ୍କର ମ 4 ଳିକ କାରଣ ହେଉଛି ଆପଣଙ୍କର ପ୍ରଥମ 4-ବାଇଟ୍ ଆବଣ୍ଟନ ଅପରେଟିଂ ସିଷ୍ଟମକୁ ବହୁତ ବଡ ଅନୁରୋଧ ସୃଷ୍ଟି କରିଥାଏ | ଆବଣ୍ଟକ ଅପଚୟ କରୁନାହିଁ | ଏହା ରଣନ .ତିକ ଅଟେ |

72 KB ବିଛିନ୍ନ କରିବା: ବାଇଟ୍ କୁଆଡେ ଯାଏ |

ପ୍ରାରମ୍ଭିକ ଆବଣ୍ଟନ ଓଭରହେଡ୍ ଅନେକ ଭିନ୍ନ ଉପାଦାନରୁ ଆସିଥାଏ ଯାହା ରନ୍ଟାଇମ୍ ଆପଣଙ୍କୁ ବ୍ୟବହାର ଯୋଗ୍ୟ ସ୍ମୃତିର ଗୋଟିଏ ବାଇଟ୍ ଦେବା ପୂର୍ବରୁ ଆରମ୍ଭ କରିବା ଆବଶ୍ୟକ | ପ୍ରତ୍ୟେକ ଉପାଦାନକୁ ବୁ explains ିବା ବ୍ୟାଖ୍ୟା କରେ ଯେ ସଂଖ୍ୟା କାହିଁକି ଏହା କରେ |

|

ପ୍ରଥମେ, glibc ର ମଲୋକ ମୁଖ୍ୟ ମଞ୍ଚ କୁ ଆରମ୍ଭ କରେ - ପ୍ରାଥମିକ ବୁକକିପିଂ ସଂରଚନା ଯାହା ମୁଖ୍ୟ ସୂତ୍ରରେ ସମସ୍ତ ଆବଣ୍ଟନକୁ ଟ୍ରାକ୍ କରେ | ଏହି ମଞ୍ଚରେ ରାଶି ପାଇଁ ମେଟାଡାଟା, ମାଗଣା ତାଲିକା ସୂଚକ ଏବଂ ବିଭିନ୍ନ ଆବଣ୍ଟନ ଆକାର ପାଇଁ ବିନ୍ ସଂରଚନା ଅନ୍ତର୍ଭୁକ୍ତ | ବଣ୍ଟନକାରୀ ପ୍ରୋଗ୍ରାମ ବ୍ରେକକୁ sbrk () ମାଧ୍ୟମରେ ବିସ୍ତାର କରନ୍ତି, ଏବଂ ପ୍ରାରମ୍ଭିକ ବିସ୍ତାର M_TOP_PAD ନାମକ ଏକ ଆଭ୍ୟନ୍ତରୀଣ ପାରାମିଟର ଦ୍ୱାରା ପରିଚାଳିତ ହୋଇଥାଏ, ଯାହାକି 128 KB ପ୍ୟାଡିଂକୁ ଡିଫଲ୍ଟ କରିଥାଏ | ଅବଶ୍ୟ, ପ୍ରକୃତ ପ୍ରାରମ୍ଭିକ ଅନୁରୋଧ ପୃଷ୍ଠା ଆଲାଇନ୍ମେଣ୍ଟ ଏବଂ ବିଦ୍ୟମାନ ବ୍ରେକ୍ ପୋଜିସନ୍ ପାଇଁ ସଜାଡିଥାଏ, ଯାହା ପ୍ରାୟତ a ଏକ ଛୋଟ ପ୍ରଥମ ଅନୁରୋଧର ଫଳାଫଳ ଦେଇଥାଏ - ସାଧାରଣତ that ଏକ ନୂତନ ଆରମ୍ଭ ପ୍ରକ୍ରିୟାରେ ସେହି 72 KB ଚିତ୍ର ନିକଟରେ ଅବତରଣ କରିଥାଏ |

ଦ୍ୱିତୀୟତ gl, glibc 2.26 ପରଠାରୁ, ବଣ୍ଟନକାରୀ ପ୍ରଥମ ବ୍ୟବହାରରେ ଏକ ଥ୍ରେଡ୍-ଲୋକାଲ୍ କ୍ୟାଚ୍ (tcache) ଆରମ୍ଭ କରନ୍ତି | ଟାକେରେ 64 ଟି ବିନ୍ ଥାଏ (ପ୍ରତ୍ୟେକ ଛୋଟ-ଆବଣ୍ଟନ ଆକାର ଶ୍ରେଣୀରେ ଗୋଟିଏ), ପ୍ରତ୍ୟେକଟି 7 ଟି କ୍ୟାଚ୍ ଖଣ୍ଡ ଧରି ରଖିବାରେ ସକ୍ଷମ | tcache_perthread_struct ନିଜେ ପ୍ରାୟ 1 KB ଖର୍ଚ୍ଚ କରେ, କିନ୍ତୁ ଏହାକୁ ଆରମ୍ଭ କରିବାର କାର୍ଯ୍ୟ ବ୍ୟାପକ ମଞ୍ଚ ସେଟଅପ୍ କୁ ଟ୍ରିଗର କରିଥାଏ | ତୃତୀୟତ C, C ++ ରନ୍ଟାଇମ୍ ଆପଣଙ୍କ ମେନ୍ () ଏପରିକି ଚାଲିବା ପୂର୍ବରୁ ଆବଣ୍ଟନ କରିସାରିଛି - ଷ୍ଟାଟିକ୍ କନଷ୍ଟ୍ରକ୍ଟର୍ସ, std :: cout ଏବଂ ବନ୍ଧୁମାନଙ୍କ ପାଇଁ ଆଇଷ୍ଟ୍ରିମ୍ ବଫର୍ ପ୍ରାରମ୍ଭିକରଣ, ଏବଂ ଲୋକାଲ୍ ସେଟଅପ୍ ସେହି ପ୍ରାରମ୍ଭିକ ହିପ୍ ପାଦଚିହ୍ନରେ ସହାୟକ ହୋଇଥାଏ |

ଆରେନା ସିଷ୍ଟମ୍ ଏବଂ କାହିଁକି ପୂର୍ବ-ବଣ୍ଟନ ସ୍ମାର୍ଟ |

ସ୍ମୃତିର ଏକ ମହତ୍ ch ପୂର୍ଣ୍ଣ ଅଂଶକୁ ପୂର୍ବ-ଆବଣ୍ଟନ କରିବାର ନିଷ୍ପତ୍ତି ଏହାକୁ ଖଣ୍ଡନ କରିବା ଅନୁରୋଧ ନୁହେଁ | ଏହା ଏକ ସୁଚିନ୍ତିତ ଇଞ୍ଜିନିୟରିଂ ଟ୍ରେଡ୍ ଅଫ୍ ଦଶନ୍ଧିର ସିଷ୍ଟମ୍ ପ୍ରୋଗ୍ରାମିଂ ଅଭିଜ୍ଞତାର ମୂଳଦୁଆ | brk () କିମ୍ବା mmap () କୁ ପ୍ରତ୍ୟେକ କଲ୍ ଉପଭୋକ୍ତା ସ୍ଥାନରୁ କର୍ଣ୍ଣଲ ସ୍ପେସ୍, ପ୍ରକ୍ରିୟାର ଭର୍ଚୁଆଲ୍ ମେମୋରୀ ମ୍ୟାପିଂର ପରିବର୍ତ୍ତନ ଏବଂ ସମ୍ଭାବ୍ୟ ପୃଷ୍ଠା ଟେବୁଲ୍ ଅପଡେଟ୍ ସହିତ ଏକ ପ୍ରସଙ୍ଗ ସୁଇଚ୍ ଅନ୍ତର୍ଭୁକ୍ତ କରେ | ଆଧୁନିକ ହାର୍ଡୱେର୍ ଉପରେ, ଗୋଟିଏ ସିଷ୍ଟମ୍ କଲ୍ ର ମୂଲ୍ୟ ପ୍ରାୟ 100-200 ନାନୋ ସେକେଣ୍ଡ୍ - ଅଲଗା ଅଲଗା, ସ୍କେଲରେ ବିପର୍ଯ୍ୟୟ |

ଏକ ପ୍ରୋଗ୍ରାମକୁ ବିଚାର କରନ୍ତୁ ଯାହା ପ୍ରାରମ୍ଭିକରଣ ସମୟରେ 10,000 ଛୋଟ ଆବଣ୍ଟନ କରିଥାଏ | ପ୍ରି-ଆବଣ୍ଟନ ବିନା, ଏହାର ଅର୍ଥ ହେଉଛି 10,000 ସିଷ୍ଟମ୍ କଲ୍, ଯାହାର ମୂଲ୍ୟ ପ୍ରାୟ 1-2 ମିଲିସେକେଣ୍ଡ୍ ଖାଣ୍ଟି ଓଭରହେଡ୍ | ଏକ ମ ena ଦାନ-ଆଧାରିତ ବଣ୍ଟନକାରୀ ସହିତ, ପ୍ରଥମ ଆବଣ୍ଟନ ଗୋଟିଏ ସିଷ୍ଟମ୍ କଲ୍ ଟ୍ରିଗର କରିଥାଏ ଏବଂ ପରବର୍ତ୍ତୀ 9,999 ଆବଣ୍ଟନଗୁଡିକ ପଏଣ୍ଟର୍ ଆରିଥମେଟିକ୍ ଏବଂ ଲିଙ୍କ୍-ତାଲିକା ଅପରେସନ୍ ମାଧ୍ୟମରେ ଉପଭୋକ୍ତା ସ୍ଥାନରେ ସମ୍ପୁର୍ଣ୍ଣ ଭାବରେ ସେବା କରାଯାଇଥାଏ - ପ୍ରତ୍ୟେକଟି ପ୍ରାୟ 10-50 ନାନୋ ସେକେଣ୍ଡ ନେଇଥାଏ | ଗଣିତ ଅସ୍ପଷ୍ଟ: ପ୍ରି-ଆବଣ୍ଟନ ମ୍ୟାଗ୍ନିଚ୍ୟୁଡ୍ କ୍ରମରେ ଜିତେ |

|

ତୁମର ପ୍ରଥମ ଆବଣ୍ଟନରେ ଆପଣ ଦେଖୁଥିବା 72 KB ସ୍ମୃତି ନଷ୍ଟ ନୁହେଁ - ଏହା ଏକ କାର୍ଯ୍ୟଦକ୍ଷତା ବିନିଯୋଗ | ବଣ୍ଟନକାରୀ ବ୍ୟାଟିଂ କରୁଛନ୍ତି ଯେ ତୁମର ପ୍ରୋଗ୍ରାମ ଶୀଘ୍ର ଅଧିକ ଆବଣ୍ଟନ କରିବ ଏବଂ ପ୍ରାୟ ପ୍ରତ୍ୟେକ ବାସ୍ତବ ଦୁନିଆରେ, ସେହି ବ୍ୟାଟ୍ ଅତି ସୁନ୍ଦର ଭାବରେ ଦେୟ ଦେବ | ଅବ୍ୟବହୃତ ଭର୍ଚୁଆଲ୍ ଠିକଣା ସ୍ଥାନର ମୂଲ୍ୟ ଆଧୁନିକ 64-ବିଟ୍ ସିଷ୍ଟମରେ ଶୂନ୍ୟ ଅଟେ |

|

ଭର୍ଚୁଆଲ୍ ମେମୋରୀ ବନାମ ଶାରୀରିକ ସ୍ମୃତି: ଏହା କାହିଁକି ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ ନୁହେଁ |

ପ୍ରଥମ ଥର ପାଇଁ ଏହି ଆଚରଣର ସମ୍ମୁଖୀନ ହେଉଥିବା ବିକାଶକାରୀଙ୍କ ମଧ୍ୟରେ ଏକ ସାଧାରଣ ଚିନ୍ତା ହେଉଛି ଉତ୍ସ ଅପଚୟ | ଯଦି ମୋର କେବଳ 4 ବାଇଟ୍ ଦରକାର, ତେବେ ମୋର ପ୍ରୋଗ୍ରାମ୍ 72 KB କାହିଁକି ଖାଉଛି? ଜଟିଳ ଅନ୍ତର୍ଦୃଷ୍ଟି ହେଉଛି ଯେ ଭର୍ଚୁଆଲ୍ ମେମୋରୀ ଶାରୀରିକ ସ୍ମୃତି ନୁହେଁ | ଯେତେବେଳେ glibc ପ୍ରୋଗ୍ରାମ୍ ବ୍ରେକ୍ କୁ 72 KB କୁ ବିସ୍ତାର କରେ, କର୍ଣ୍ଣଲ ପ୍ରକ୍ରିୟାର ଭର୍ଚୁଆଲ୍ ମେମୋରୀ ମ୍ୟାପିଂକୁ ଅପଡେଟ୍ କରେ, କିନ୍ତୁ ଏହା ତୁରନ୍ତ ସେହି ପୃଷ୍ଠାଗୁଡ଼ିକୁ ଭ physical ତିକ RAM ସହିତ ପଛକୁ ଫେରାଇ ନଥାଏ | ପ୍ରକୃତ ଭ physical ତିକ ପୃଷ୍ଠାଗୁଡ଼ିକ ପୃଷ୍ଠା ତ୍ରୁଟି ମାଧ୍ୟମରେ ଚାହିଦା ଅନୁଯାୟୀ ବଣ୍ଟନ କରାଯାଇଥାଏ - ଯେତେବେଳେ ତୁମର ପ୍ରୋଗ୍ରାମ ଏକ ନିର୍ଦ୍ଦିଷ୍ଟ ଠିକଣାକୁ ଲେଖେ, କର୍ଣ୍ଣଲ ଏହାକୁ ସ୍ମୃତିର ପ୍ରକୃତ ପୃଷ୍ଠା ନ୍ୟସ୍ତ କରେ |

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

ଏହାର ଅର୍ଥ ହେଉଛି ଯଦିଓ ଆପଣଙ୍କର ପ୍ରକ୍ରିୟାର ଭର୍ଚୁଆଲ୍ ସାଇଜ୍ 72 KB ବ increases ିଥାଏ, ଏହାର ବାସିନ୍ଦା ସେଟ୍ ସାଇଜ୍ (RSS) - ପ୍ରକୃତରେ ଖର୍ଚ୍ଚ ହୋଇଥିବା ଭ physical ତିକ RAM ପରିମାଣ - ଆପଣ ପ୍ରକୃତରେ ସ୍ପର୍ଶ କରୁଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକ ଦ୍ୱାରା ବ increases ିଥାଏ | ଗୋଟିଏ ନୂତନ int ପାଇଁ, ତାହା ସାଧାରଣତ one ଗୋଟିଏ 4 KB ପୃଷ୍ଠା, ଏବଂ ମଞ୍ଚ ମେଟାଡାଟା ଯାହା ବି ପୃଷ୍ଠା ଦଖଲ କରେ | ଅବଶିଷ୍ଟ ଭର୍ଚୁଆଲ୍ ସ୍ପେସ୍ ସେଠାରେ ବସିଥାଏ, ବ୍ୟବହାର ପାଇଁ ପ୍ରସ୍ତୁତ, ଠିକଣା ସ୍ଥାନ ବ୍ୟତୀତ ଅନ୍ୟ କିଛି ଖର୍ଚ୍ଚ କରେ ନାହିଁ - ଯେଉଁଥିରୁ ଆପଣଙ୍କର 64-ବିଟ୍ ଲିନକ୍ସ ସିଷ୍ଟମରେ 128 ଟିବି ଅଛି |

ଉତ୍ପାଦନ ପ୍ରୟୋଗଗୁଡ଼ିକର ପ୍ରୋଫାଇଲ୍ ଏବଂ ମନିଟରିଂ କରିବା ସମୟରେ ଏହି ପାର୍ଥକ୍ୟ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ | ଯଦି ଆପଣ ସଫ୍ଟୱେର୍ ନିର୍ମାଣ କରୁଛନ୍ତି ଯାହା ପ୍ରକୃତ ଉତ୍ସ ବ୍ୟବହାରକୁ ଟ୍ରାକ୍ କରିବା ଆବଶ୍ୟକ କରେ - ଏହା ଏକ Saa ବ୍ୟାକେଣ୍ଡ୍, ମାଇକ୍ରୋ ସର୍ଭିସ୍, କିମ୍ବା ଆନାଲିଟିକ୍ସ ପାଇପଲାଇନ ଯାହା ବ୍ୟବସାୟ କାର୍ଯ୍ୟ ପାଇଁ ମେୱାଇଜ୍ ଭଳି ପ୍ଲାଟଫର୍ମରେ ଚାଲିଥାଏ - ଆପଣ ସର୍ବଦା ଭର୍ଚୁଆଲ୍ ସାଇଜ୍ ଅପେକ୍ଷା RSS ଉପରେ ନଜର ରଖିବା ଉଚିତ୍ | / proc / [pid] / smaps , valgrind --tool = massif , ଏବଂ pmap ପରି ଉପକରଣଗୁଡ଼ିକ ଆପଣଙ୍କୁ ଭର୍ଚୁଆଲ୍ ମେମୋରୀ ଫିଗରକୁ ବିଭ୍ରାନ୍ତ କରିବା ପରିବର୍ତ୍ତେ ସଠିକ୍ ଭ physical ତିକ ସ୍ମୃତି ପାଦଚିହ୍ନ ଦେଇପାରେ |

ବିଭିନ୍ନ ବଣ୍ଟନକାରୀମାନେ ପ୍ରଥମ ବଣ୍ଟନକୁ କିପରି ପରିଚାଳନା କରନ୍ତି |

72 KB ଚିତ୍ର glibc ର ptmalloc2 ପାଇଁ ନିର୍ଦ୍ଦିଷ୍ଟ | ଅନ୍ୟ ବଣ୍ଟନକାରୀମାନେ ବିଭିନ୍ନ ବାଣିଜ୍ୟ ବନ୍ଦ କରନ୍ତି, ଏବଂ ପ୍ରାରମ୍ଭିକ ଆବଣ୍ଟନ ଓଭରହେଡ୍ ସେହି ଅନୁଯାୟୀ ଭିନ୍ନ ହୋଇଥାଏ | କାର୍ଯ୍ୟଦକ୍ଷତା ସମ୍ବେଦନଶୀଳ ପ୍ରୟୋଗଗୁଡ଼ିକ ପାଇଁ ଏକ ବଣ୍ଟନକାରୀ ବାଛିବାବେଳେ ଏହି ପାର୍ଥକ୍ୟ ବୁ standing ିବା ମୂଲ୍ୟବାନ ଅଟେ |

  • jemalloc (ଫେସବୁକ୍ ଦ୍ୱାରା ବ୍ୟବହୃତ, FreeBSD) - ଥ୍ରେଡ୍-ଲୋକାଲ୍ କ୍ୟାଚ୍ ସହିତ ଏକ ଅଧିକ ଗ୍ରାନୁଲାର୍ ମଞ୍ଚ ଗଠନ ବ୍ୟବହାର କରେ | ପ୍ରାରମ୍ଭିକ ଓଭରହେଡ୍ ଅଧିକ ହେବାକୁ ଲାଗେ (ପ୍ରାୟତ 200 200+ KB) କିନ୍ତୁ ଲକ୍ ବିବାଦ ହ୍ରାସ ହେତୁ ଉନ୍ନତ ମଲ୍ଟି-ଥ୍ରେଡ୍ କାର୍ଯ୍ୟଦକ୍ଷତା ପ୍ରଦାନ କରେ |
  • tcmalloc (ଗୁଗୁଲର ଥ୍ରେଡ୍-କ୍ୟାଚିଂ ମଲୋକ) - ଆକ୍ରମଣାତ୍ମକ ପ୍ରି-ବଣ୍ଟନ ସହିତ ଡିଫଲ୍ଟ ଭାବରେ ପ୍ରାୟ 2 MB ର ପ୍ରତି ଥ୍ରେଡ୍ କ୍ୟାଚ୍ ବଣ୍ଟନ କରେ | ପ୍ରାରମ୍ଭିକ ଓଭରହେଡ୍ ଅଧିକ, କିନ୍ତୁ ପରବର୍ତ୍ତୀ ଛୋଟ ଆବଣ୍ଟନଗୁଡ଼ିକ ଅତ୍ୟନ୍ତ ଦ୍ରୁତ ଅଟେ |
  • musl libc's malloc - ସମସ୍ତ ଆବଣ୍ଟନ ପାଇଁ mmap ଉପରେ ଆଧାର କରି ବହୁତ ସରଳ ଡିଜାଇନ୍ ବ୍ୟବହାର କରେ | ପ୍ରାରମ୍ଭିକ ଓଭରହେଡ୍ ସର୍ବନିମ୍ନ (ପ୍ରାୟତ all ଆବଣ୍ଟନ ପାଇଁ ମାତ୍ର 4 KB), କିନ୍ତୁ ଅଧିକ ବାରମ୍ବାର ସିଷ୍ଟମ୍ କଲ୍ ହେତୁ ପ୍ରତି ଆବଣ୍ଟନ ମୂଲ୍ୟ ଅଧିକ |
  • ମିମାଲୋକ (ମାଇକ୍ରୋସଫ୍ଟ) - 64 MB ସେଗମେଣ୍ଟ ସହିତ ସେଗମେଣ୍ଟ-ଆଧାରିତ ଆବଣ୍ଟନ ବ୍ୟବହାର କରେ | ପ୍ରଥମ ଆବଣ୍ଟନ ଏକ 64 MB ଭର୍ଚୁଆଲ୍ ସଂରକ୍ଷଣ (ସର୍ବନିମ୍ନ ଶାରୀରିକ ପ୍ରତିବଦ୍ଧତା ସହିତ), ଅସାଧାରଣ ସ୍ଥାନ ଏବଂ ଥ୍ରୋପପୁଟ ପାଇଁ ବାଣିଜ୍ୟ ଠିକଣା ସ୍ଥାନ ସୃଷ୍ଟି କରିଥାଏ |

ଏହି ବଣ୍ଟନକାରୀଙ୍କ ମଧ୍ୟରେ ପସନ୍ଦ ସମ୍ପୁର୍ଣ୍ଣ ଭାବରେ ଆପଣଙ୍କର କାର୍ଯ୍ୟଭାର ଉପରେ ନିର୍ଭର କରେ | ଭାରୀ ମଲ୍ଟି-ଥ୍ରେଡ୍ ଆବଣ୍ଟନ ସହିତ ଦୀର୍ଘ ଚାଲୁଥିବା ସର୍ଭର ପ୍ରୟୋଗଗୁଡ଼ିକ ପାଇଁ, jemalloc କିମ୍ବା tcmalloc ସାଧାରଣତ gl glibc ର ଡିଫଲ୍ଟକୁ ଅତିକ୍ରମ କରେ | ମେମୋରୀ-ସୀମିତ ଏମ୍ବେଡ୍ ସିଷ୍ଟମ୍ ପାଇଁ, କମ୍ ଥ୍ରୋପପୁଟ୍ ସତ୍ତ୍ mus େ ମୁସଲର ସରଳ ଉପାୟ ଅଧିକ ପସନ୍ଦ ହୋଇପାରେ | ଅଧିକାଂଶ ସାଧାରଣ ଉଦ୍ଦେଶ୍ୟ ଡେସ୍କଟପ୍ ଏବଂ ସର୍ଭର ପ୍ରୟୋଗଗୁଡ଼ିକ ପାଇଁ, ptmalloc2 ର 72 KB ପ୍ରାରମ୍ଭିକ ଓଭରହେଡ୍ ଏକ ଯୁକ୍ତିଯୁକ୍ତ ଡିଫଲ୍ଟକୁ ପ୍ରତିନିଧିତ୍ୱ କରେ ଯାହା ଟ୍ୟୁନିଂ ବିନା ଭଲ କାମ କରେ |

ପ୍ରାରମ୍ଭିକ ଆବଣ୍ଟନ ଆଚରଣକୁ ସଜାଡ଼ିବା |

ଯଦି ଆପଣଙ୍କର ବ୍ୟବହାର ମାମଲା ପାଇଁ ଡିଫଲ୍ଟ 72 KB ପ୍ରାରମ୍ଭିକ ଓଭରହେଡ୍ ପ୍ରକୃତରେ ସମସ୍ୟା ସୃଷ୍ଟି କରେ - ବୋଧହୁଏ ଆପଣ ହଜାରେ ସ୍ୱଳ୍ପ ସମୟର ପ୍ରକ୍ରିୟା ସୃଷ୍ଟି କରୁଛନ୍ତି, ପ୍ରତ୍ୟେକଟି କେବଳ ହାତଗଣତି ବଣ୍ଟନ କରୁଛନ୍ତି - ଗ୍ଲିବ୍ ମଲପଟ୍ () ଏବଂ MALLOC_ ପରିବାର ପରିବେଶ ଭେରିଏବଲ୍ ମାଧ୍ୟମରେ ଅନେକ ଟ୍ୟୁନେବଲ୍ ପ୍ରଦାନ କରିଥାଏ |

M_TOP_PAD ପାରାମିଟର ତତକ୍ଷଣାତ୍ ଆବଶ୍ୟକତାଠାରୁ ଅଧିକ ଅତିରିକ୍ତ ମେମୋରୀ ଅନୁରୋଧ କରେ | ଏହାକୁ ମଲପଟ (M_TOP_PAD, 0) ସହିତ 0 ରେ ସେଟ କରିବା, ପ୍ରାରମ୍ଭିକ ଓଭରହେଡକୁ ଯଥେଷ୍ଟ ହ୍ରାସ କରି କେବଳ ଯାହା ଆବଶ୍ୟକ ତାହା ଅନୁରୋଧ କରିବାକୁ ବଣ୍ଟନକାରୀଙ୍କୁ କହିଥାଏ | M_MMAP_THRESHOLD ପାରାମିଟର ଉପର ଆକାରକୁ ନିୟନ୍ତ୍ରଣ କରିଥାଏ ଯେଉଁଥିରେ ଆବଣ୍ଟନ ମଞ୍ଚ ବଦଳରେ mmap ବ୍ୟବହାର କରିଥାଏ | ମୁକ୍ତ ହୋଇଥିବା ମେମୋରୀ OS କୁ ଫେରିବାବେଳେ M_TRIM_THRESHOLD ନିୟନ୍ତ୍ରଣ କରିଥାଏ | ଏବଂ glibc 2.26 ପରଠାରୁ, glibc.malloc.tcache_count ଏବଂ glibc.malloc.tcache_max ଟ୍ୟୁନେବଲ୍ ଗୁଡିକ ଆପଣଙ୍କୁ ଥ୍ରେଡ୍ କ୍ୟାଚ୍ ଆଚରଣକୁ ନିୟନ୍ତ୍ରଣ କରିବାକୁ ଦେଇଥାଏ |

ତଥାପି, ସତର୍କତାର ଏକ ଶବ୍ଦ: ଯତ୍ନର ସହ ବେଞ୍ଚମାର୍କିଂ ନକରି ଏହି ପାରାମିଟରଗୁଡିକ ସଜାଡ଼ିବା ପ୍ରାୟତ things ସବୁବେଳେ ଖରାପ କରିଥାଏ | ବିସ୍ତୃତ ବାସ୍ତବ-ବିଶ୍ୱ ପ୍ରୋଫାଇଲ୍ ଉପରେ ଆଧାର କରି ଡିଫଲ୍ଟଗୁଡିକ ଚୟନ କରାଯାଇଥିଲା, ଏବଂ ସେମାନେ ଅଧିକାଂଶ କାର୍ଯ୍ୟଭାର ପାଇଁ ଏକ ମଧୁର ସ୍ଥାନ ପ୍ରତିନିଧିତ୍ୱ କରନ୍ତି | ଉତ୍ପାଦନ ପ୍ରୋଫାଇଲରୁ ଯଦି ଆପଣଙ୍କର ଦୃ strong ପ୍ରମାଣ ନାହିଁ, ମଲ୍ଲୋକ୍ ଓଭରହେଡ୍ ହେଉଛି ଏକ ପ୍ରତିବନ୍ଧକ - ଏବଂ ଆପଣ ଆପଣଙ୍କର ପରିବର୍ତ୍ତନଗୁଡିକର ପ୍ରଭାବ ମାପ କରିଛନ୍ତି - ଡିଫଲ୍ଟଗୁଡ଼ିକୁ ଏକାକୀ ଛାଡିଦିଅ | ବଣ୍ଟନକାରୀଙ୍କ ଅକାଳ ଅପ୍ଟିମାଇଜେସନ୍ ହେଉଛି ୟାକ ସେଭିଙ୍ଗର ଏକ ବିଶେଷ ଗୁପ୍ତ ରୂପ ଯାହାକି ଅଳ୍ପ ଲାଭ ପାଇଁ ଅଗଣିତ ଇଞ୍ଜିନିୟରିଂ ଘଣ୍ଟା ଖର୍ଚ୍ଚ କରିଛି |

ସିଷ୍ଟମ୍ ପ୍ରୋଗ୍ରାମିଂ ବିଷୟରେ ଏହା ଆମକୁ ଯାହା ଶିଖାଏ |

72 KB ପ୍ରଥମ ଆବଣ୍ଟନ ରହସ୍ୟ ହେଉଛି ଏହାର ମୂଳରେ, ଅବକ୍ଷୟ ସ୍ତର ବିଷୟରେ ଏକ ଶିକ୍ଷା | C ++ ଆପଣଙ୍କୁ ଏକ ଭ୍ରମ ଦେଇଥାଏ ଯାହା ନୂତନ int 4 ବାଇଟ୍ ବଣ୍ଟନ କରେ | ଭାଷା ମାନକ ଏପରି କହୁଛି | ତୁମର ମାନସିକ ମଡେଲ ଏପରି କହୁଛି | କିନ୍ତୁ ଆପଣଙ୍କର କୋଡ୍ ଏବଂ ହାର୍ଡୱେର୍ ମଧ୍ୟରେ ଅତ୍ୟାଧୁନିକ ସିଷ୍ଟମର ଏକ ଷ୍ଟାକ୍ ବସିଥାଏ - C ++ ଚାଲିବା ସମୟ, C ଲାଇବ୍ରେରୀ ବଣ୍ଟନକାରୀ, କର୍ଣ୍ଣଲର ଭର୍ଚୁଆଲ୍ ମେମୋରୀ ସବ୍ ସିଷ୍ଟମ୍, ଏବଂ ହାର୍ଡୱେରର MMU ଏବଂ TLB - ପ୍ରତ୍ୟେକ ନିଜ ନିଜର ଆଚରଣ, ଅପ୍ଟିମାଇଜେସନ୍ ଏବଂ ଓଭରହେଡ୍ ଯୋଗ କରନ୍ତି |

ଏହା ଏକ ତ୍ରୁଟି ନୁହେଁ | ଏହା ସିଷ୍ଟମ୍ ସଫ୍ଟୱେର୍ ର ପୁରା ପଏଣ୍ଟ | ଏକ ପ୍ରକୃତ ସମସ୍ୟାର ସମାଧାନ ପାଇଁ ପ୍ରତ୍ୟେକ ସ୍ତର ବିଦ୍ୟମାନ ଅଛି: ଆବଣ୍ଟକ ବିଦ୍ୟମାନ ଅଛି ତେଣୁ ଆପଣଙ୍କୁ ପ୍ରତ୍ୟେକ ଆବଣ୍ଟନ ପାଇଁ ସିଷ୍ଟମ୍ କଲ୍ କରିବାକୁ ପଡିବ ନାହିଁ | ଭର୍ଚୁଆଲ୍ ମେମୋରୀ ସିଷ୍ଟମ୍ ବିଦ୍ୟମାନ ଅଛି ତେଣୁ ଆପଣଙ୍କୁ ସିଧାସଳଖ ଶାରୀରିକ ସ୍ମୃତି ପରିଚାଳନା କରିବାକୁ ପଡିବ ନାହିଁ | ପେଜ୍ ଫଲ୍ଟ ହ୍ୟାଣ୍ଡେଲର୍ ବିଦ୍ୟମାନ ଅଛି ତେଣୁ ସ୍ମୃତି ଅଳସୁଆ ଏବଂ ଦକ୍ଷତାର ସହିତ ପ୍ରତିବଦ୍ଧ | ପ୍ରତ୍ୟେକ ସ୍ତର ବହୁ ପରିମାଣର କାର୍ଯ୍ୟଦକ୍ଷତା ଏବଂ ସୁବିଧା ପାଇଁ ଅଳ୍ପ ପରିମାଣର ସ୍ୱଚ୍ଛତା ବ୍ୟବସାୟ କରେ |

ବିକାଶକାରୀମାନେ ଯେଉଁମାନେ ସବୁଠାରୁ ନିର୍ଭରଯୋଗ୍ୟ, ସର୍ବୋଚ୍ଚ-କାର୍ଯ୍ୟକ୍ଷମ ସିଷ୍ଟମ୍ ଗଠନ କରନ୍ତି, ସେମାନେ ଏହି ସ୍ତରଗୁଡିକ ବୁ understand ନ୍ତି - କାରଣ ସେମାନେ ସେମାନଙ୍କ ବିଷୟରେ କ୍ରମାଗତ ଭାବରେ ଚିନ୍ତା କରିବା ଆବଶ୍ୟକ କରନ୍ତି ନାହିଁ, କିନ୍ତୁ ଯେତେବେଳେ କିଛି ଅପ୍ରତ୍ୟାଶିତ ଘଟଣା ଘଟେ (ଏକ ରହସ୍ୟମୟ 72 KB ଆବଣ୍ଟନ ପରି), ସେମାନଙ୍କର କାରଣ ବୁ to ିବା ପାଇଁ ସେମାନଙ୍କର ମାନସିକ ମଡେଲ୍ ଥାଏ | ଆପଣ ଏକ ରିଅଲ୍-ଟାଇମ୍ ଟ୍ରେଡିଂ ସିଷ୍ଟମ୍, ଏକ ଗେମ୍ ଇଞ୍ଜିନ୍, କିମ୍ବା ହଜାର ହଜାର ଉପଭୋକ୍ତାଙ୍କୁ ସେବା କରୁଥିବା ଏକ ବ୍ୟବସାୟ ପ୍ଲାଟଫର୍ମ ନିର୍ମାଣ କରୁଛନ୍ତି, ସିଷ୍ଟମ୍ ସ୍ତରରେ ଆପଣଙ୍କ କୋଡ୍ ପ୍ରକୃତରେ କ’ଣ କରେ ସେ ବିଷୟରେ ଚିନ୍ତା କରିବାର କ୍ଷମତା ହେଉଛି ଦକ୍ଷ ବିକାଶକାରୀଙ୍କୁ ବ୍ୟତିକ୍ରମଠାରୁ ପୃଥକ କରେ | 72 KB ଏକ ତ୍ରୁଟି ନୁହେଁ | ଏହା ତୁମର ବଣ୍ଟନକାରୀ ଏହାର କାର୍ଯ୍ୟକୁ ଚମତ୍କାର ଭାବରେ କରୁଛି |

|

ଆଜି ଆପଣଙ୍କର ବ୍ୟବସାୟ OS ନିର୍ମାଣ କରନ୍ତୁ

ଫ୍ରିଲାନ୍ସର୍ ଠାରୁ ଆରମ୍ଭ କରି ଏଜେନ୍ସି ପର୍ଯ୍ୟନ୍ତ, ମେୱାଇଜ୍ 207 ଇଣ୍ଟିଗ୍ରେଟେଡ୍ ମଡ୍ୟୁଲ୍ ସହିତ 138,000+ ବ୍ୟବସାୟକୁ ଶକ୍ତି ପ୍ରଦାନ କରେ | ମାଗଣା ଆରମ୍ଭ କର, ଯେତେବେଳେ ତୁମେ ବ grow ଼ିବ ଅପଗ୍ରେଡ୍ କର |

ମାଗଣା ଖାତା ସୃଷ୍ଟି କରନ୍ତୁ →