ஏன் முதல் C++ (m)ஒதுக்கீடு எப்போதும் 72 KB? | Mewayz Blog
Hacker News

ஏன் முதல் C++ (m)ஒதுக்கீடு எப்போதும் 72 KB?

கருத்துகள்

1 min read Via joelsiks.com

Mewayz Team

Editorial Team

Hacker News

உங்கள் முதல் C++ ஒதுக்கீட்டின் மர்மம்

நீங்கள் ஒரு எளிய C++ நிரலை எழுதுகிறீர்கள். ஒற்றை புதிய எண்ணாக. நான்கு பைட்டுகள். நீங்கள் ஸ்ட்ரேஸ் அல்லது உங்களுக்குப் பிடித்த மெமரி ப்ரொஃபைலரை இயக்குகிறீர்கள், அது இருக்கிறது - உங்கள் செயல்முறையானது இயக்க முறைமையிலிருந்து தோராயமாக 72 KB கோரியுள்ளது. 4 பைட்டுகள் அல்ல. 64 பைட்டுகள் அல்ல. ஒரு முழு 72 KB. நீங்கள் எப்போதாவது அந்த எண்ணை உற்றுப் பார்த்து, உங்கள் கருவி உங்களிடம் பொய் சொல்கிறதா என்று யோசித்திருந்தால், நீங்கள் தனியாக இல்லை. இந்த வினோதமான நடத்தை என்பது C++ டெவலப்பர்கள் முதல் முறையாக மெமரி இன்டர்னல்களை தோண்டி அடிக்கடி கேட்கும் கேள்விகளில் ஒன்றாகும், மேலும் பதில் உங்கள் குறியீடு மற்றும் உண்மையான வன்பொருளுக்கு இடையே உள்ள அடுக்குகள் வழியாக ஒரு கவர்ச்சிகரமான பயணத்திற்கு நம்மை அழைத்துச் செல்கிறது.

நீங்கள் புதிய

என்று அழைக்கும்போது என்ன நடக்கும்

72 KB எண்ணிக்கையைப் புரிந்து கொள்ள, நீங்கள் முழு ஒதுக்கீடு சங்கிலியைக் கண்டறிய வேண்டும். உங்கள் C++ குறியீடு new intஐ இயக்கும் போது, ​​கம்பைலர் அதை Operator newக்கான அழைப்பாக மொழிபெயர்க்கிறது, இது பெரும்பாலான Linux கணினிகளில் glibc இலிருந்து malloc க்கு பிரதிநிதித்துவம் செய்கிறது. ஆனால் malloc நேரடியாக கர்னலிடம் 4 பைட் நினைவகத்தைக் கேட்கவில்லை. கர்னல் பக்கங்களில் இயங்குகிறது - பொதுவாக x86_64 இல் 4 KB - மற்றும் ஒரு எளிய நினைவக அணுகலுடன் ஒப்பிடும்போது கணினி அழைப்பின் விலை மிகப்பெரியது. ஒவ்வொரு தனிப்பட்ட ஒதுக்கீட்டிற்கும் brk() அல்லது mmap() என அழைப்பது எந்த ஒரு சிறிய நிரலையும் செயலிழக்கச் செய்யும்.

மாறாக, glibc இன் நினைவக ஒதுக்கி - ptmalloc2 எனப்படும் செயல்படுத்தல், டக் லியாவின் கிளாசிக் dlmalloc இலிருந்து வந்தது - இது ஒரு இடைத்தரகராக செயல்படுகிறது. இது கர்னலில் இருந்து பெரிய அளவிலான நினைவகங்களைக் கோருகிறது, பின்னர் உங்கள் நிரலுக்குத் தேவைப்படும்போது அவற்றை சிறிய துண்டுகளாக செதுக்குகிறது. உங்கள் முதல் 4-பைட் ஒதுக்கீடு இயக்க முறைமைக்கு மிகப் பெரிய கோரிக்கையைத் தூண்டுவதற்கு இதுவே அடிப்படைக் காரணம். ஒதுக்குபவர் வீணாக இல்லை. இது மூலோபாயமாக உள்ளது.

72 KB ஐப் பிரித்தல்: பைட்டுகள் எங்கு செல்கின்றன

பயன்படுத்தக்கூடிய நினைவகத்தின் ஒரு பைட்டைக் கூட உங்களுக்கு வழங்குவதற்கு முன், இயக்க நேரம் தொடங்கப்பட வேண்டிய பல வேறுபட்ட கூறுகளிலிருந்து ஆரம்ப ஒதுக்கீடு மேல்நிலை வருகிறது. ஒவ்வொரு கூறுகளையும் புரிந்துகொள்வது, அந்த எண் ஏன் எங்கு செல்கிறது என்பதை விளக்குகிறது.

முதலாவதாக, glibc இன் malloc, முக்கிய அரங்கத்தை துவக்குகிறது — இது முதன்மையான புத்தக பராமரிப்பு அமைப்பாகும், இது முக்கிய நூலில் உள்ள அனைத்து ஒதுக்கீடுகளையும் கண்காணிக்கும். இந்த அரங்கில் குவியலுக்கான மெட்டாடேட்டா, இலவச பட்டியல் சுட்டிகள் மற்றும் வெவ்வேறு ஒதுக்கீடு அளவுகளுக்கான பின் கட்டமைப்புகள் ஆகியவை அடங்கும். ஒதுக்கீட்டாளர் நிரல் இடைவெளியை sbrk() வழியாக நீட்டிக்கிறார், மேலும் ஆரம்ப நீட்டிப்பு M_TOP_PAD எனப்படும் உள் அளவுருவால் நிர்வகிக்கப்படுகிறது, இது 128 KB பேடிங்கிற்கு இயல்புநிலையாக இருக்கும். எவ்வாறாயினும், உண்மையான ஆரம்ப கோரிக்கையானது பக்க சீரமைப்பு மற்றும் ஏற்கனவே உள்ள முறிவு நிலை ஆகியவற்றிற்காக சரிசெய்யப்படுகிறது, இது பெரும்பாலும் சிறிய முதல் கோரிக்கையை விளைவிக்கிறது - பொதுவாக புதிதாக தொடங்கப்பட்ட செயல்பாட்டில் அந்த 72 KB எண்ணிக்கைக்கு அருகில் இறங்கும்.

இரண்டாவது, glibc 2.26 முதல், ஒதுக்கீட்டாளர் முதல் பயன்பாட்டில் த்ரெட்-லோக்கல் கேச் (tcache) ஐ துவக்குகிறது. tcache 64 தொட்டிகளைக் கொண்டுள்ளது (ஒரு சிறிய-ஒதுக்கீடு அளவு வகுப்பிற்கு ஒன்று), ஒவ்வொன்றும் 7 தற்காலிக சேமிப்பு துண்டுகளை வைத்திருக்கும் திறன் கொண்டது. tcache_perthread_struct ஆனது சுமார் 1 KB ஐப் பயன்படுத்துகிறது, ஆனால் அதை துவக்கும் செயல் பரந்த அரங்க அமைப்பைத் தூண்டுகிறது. மூன்றாவதாக, உங்கள் முதன்மை() இயங்குவதற்கு முன்பே C++ இயக்க நேரம் ஏற்கனவே ஒதுக்கீடுகளைச் செய்துவிட்டது — நிலையான கன்ஸ்ட்ரக்டர்கள், std::cout மற்றும் நண்பர்களுக்கான iostream பஃபர் துவக்கம், மற்றும் லோகேல் அமைப்பு அனைத்தும் அந்த ஆரம்பக் குவியத் தடத்திற்கு பங்களிக்கின்றன.

அரேனா சிஸ்டம் மற்றும் ஏன் முன்-ஒதுக்கீடு புத்திசாலித்தனமானது

நினைவகத்தின் கணிசமான பகுதியைத் துண்டு துண்டாகக் கோருவதற்குப் பதிலாக முன்-ஒதுக்கீடு செய்வதற்கான முடிவு, செயல்பாட்டின் விபத்து அல்ல. இது பல தசாப்தங்களாக கணினி நிரலாக்க அனுபவத்தில் வேரூன்றிய வேண்டுமென்றே பொறியியல் பரிமாற்றமாகும். brk() அல்லது mmap() க்கான ஒவ்வொரு அழைப்பிலும் பயனர் இடத்திலிருந்து கர்னல் இடத்துக்கு சூழல் மாறுதல், செயல்பாட்டின் மெய்நிகர் நினைவக மேப்பிங்கின் மாற்றம் மற்றும் சாத்தியமான பக்க அட்டவணை புதுப்பிப்புகள் ஆகியவை அடங்கும். நவீன வன்பொருளில், ஒரு சிஸ்டம் அழைப்புக்கு தோராயமாக 100-200 நானோ விநாடிகள் செலவாகும் - தனிமையில் அற்பமானது, அளவில் பேரழிவு.

தொடக்கத்தின் போது 10,000 சிறிய ஒதுக்கீடுகளைச் செய்யும் திட்டத்தைக் கவனியுங்கள். முன் ஒதுக்கீடு இல்லாமல், அதாவது 10,000 சிஸ்டம் அழைப்புகள், தோராயமாக 1-2 மில்லி விநாடிகள் தூய மேல்நிலை செலவாகும். அரங்க அடிப்படையிலான ஒதுக்கீட்டாளருடன், முதல் ஒதுக்கீடு ஒரு சிஸ்டம் அழைப்பைத் தூண்டுகிறது, மேலும் அடுத்தடுத்த 9,999 ஒதுக்கீடுகள் சுட்டி எண்கணிதம் மற்றும் இணைக்கப்பட்ட பட்டியல் செயல்பாடுகள் மூலம் முற்றிலும் பயனர் இடத்தில் சேவை செய்யப்படுகின்றன - ஒவ்வொன்றும் தோராயமாக 10-50 நானோ விநாடிகள் ஆகும். கணிதம் தெளிவற்றது: முன் ஒதுக்கீடு அளவு ஆர்டர்களால் வெற்றி பெறுகிறது.

உங்கள் முதல் ஒதுக்கீட்டில் நீங்கள் பார்க்கும் 72 KB நினைவகம் வீணாகாது - இது ஒரு செயல்திறன் முதலீடு. ஒதுக்கீட்டாளர் உங்கள் திட்டம் விரைவில் அதிக ஒதுக்கீடுகளை செய்யும் என்று பந்தயம் கட்டுகிறார், மேலும் ஒவ்வொரு நிஜ உலக சூழ்நிலையிலும், அந்த பந்தயம் அழகாக பலனளிக்கும். நவீன 64-பிட் கணினிகளில் பயன்படுத்தப்படாத மெய்நிகர் முகவரி இடத்தின் விலை பூஜ்ஜியமாகும்.

விர்ச்சுவல் மெமரி வெர்சஸ். ஃபிசிக்கல் மெமரி: ஏன் இது முக்கியமில்லை

முதன்முறையாக டெவலப்பர்கள் இந்த நடத்தையை எதிர்கொள்ளும் பொதுவான கவலை வள விரயம் ஆகும். எனக்கு 4 பைட்டுகள் மட்டுமே தேவைப்பட்டால், எனது நிரல் ஏன் 72 KB ஐப் பயன்படுத்துகிறது? முக்கியமான நுண்ணறிவு என்னவென்றால், மெய்நிகர் நினைவகம் உடல் நினைவகம் அல்ல. glibc நிரல் இடைவெளியை 72 KB வரை நீட்டிக்கும்போது, ​​கர்னல் செயல்முறையின் மெய்நிகர் நினைவக மேப்பிங்கைப் புதுப்பிக்கிறது, ஆனால் அது அந்த பக்கங்களை இயற்பியல் RAM உடன் உடனடியாகப் பேக் செய்யாது. உண்மையான இயற்பியல் பக்கங்கள் தேவைக்கேற்ப பக்க பிழைகள் மூலம் ஒதுக்கப்படுகின்றன - உங்கள் நிரல் ஒரு குறிப்பிட்ட முகவரிக்கு எழுதும் போது மட்டுமே கர்னல் அதற்கு உண்மையான நினைவக பக்கத்தை ஒதுக்கும்.

💡 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 அதிகரித்தாலும், அதன் குடியிருப்பு தொகுப்பு அளவு (RSS) - உண்மையில் நுகரப்படும் இயற்பியல் RAM அளவு - நீங்கள் உண்மையில் தொடும் பக்கங்களால் மட்டுமே அதிகரிக்கிறது. ஒரு புதிய எண்ணுக்கு, இது பொதுவாக ஒரு 4 KB பக்கமாகும், மேலும் அரங்க மெட்டாடேட்டா எந்தப் பக்கத்தை ஆக்கிரமித்தாலும். மீதமுள்ள விர்ச்சுவல் ஸ்பேஸ் அங்கேயே உள்ளது, பயன்பாட்டிற்குத் தயாராக உள்ளது, முகவரி இடத்தைத் தவிர வேறு எதுவும் செலவாகாது - இதில் 64-பிட் லினக்ஸ் கணினியில் 128 TB உள்ளது.

உற்பத்தி பயன்பாடுகளை விவரக்குறிப்பு மற்றும் கண்காணிக்கும் போது இந்த வேறுபாடு முக்கியமானது. உண்மையான ஆதார நுகர்வுகளைக் கண்காணிக்க வேண்டிய மென்பொருளை நீங்கள் உருவாக்குகிறீர்கள் என்றால் - அது SaaS பின்தளமாகவோ, மைக்ரோ சர்வீஸ் ஆகவோ அல்லது வணிகச் செயல்பாடுகளுக்காக Mewayz போன்ற இயங்குதளங்களில் இயங்கும் பகுப்பாய்வு பைப்லைனாக இருந்தாலும் - நீங்கள் எப்போதும் மெய்நிகர் அளவைக் காட்டிலும் RSS ஐக் கண்காணிக்க வேண்டும். /proc/[pid]/smaps, valgrind --tool=massif மற்றும் pmap போன்ற கருவிகள் மெய்நிகர் நினைவக புள்ளிவிவரங்களை தவறாக வழிநடத்துவதற்குப் பதிலாக துல்லியமான இயற்பியல் நினைவக தடயங்களை உங்களுக்கு வழங்க முடியும்.

வெவ்வேறு ஒதுக்கீட்டாளர்கள் முதல் ஒதுக்கீட்டை எவ்வாறு கையாளுகிறார்கள்

72 KB எண்ணிக்கை glibc இன் ptmalloc2 க்குக் குறிப்பிட்டது. மற்ற ஒதுக்கீட்டாளர்கள் வெவ்வேறு பரிமாற்றங்களைச் செய்கிறார்கள், மேலும் ஆரம்ப ஒதுக்கீடு மேல்நிலை அதற்கேற்ப மாறுபடும். செயல்திறன் உணர்திறன் பயன்பாடுகளுக்கான ஒதுக்கீட்டாளரைத் தேர்ந்தெடுக்கும்போது இந்த வேறுபாடுகளைப் புரிந்துகொள்வது மதிப்புமிக்கது.

  • jemalloc (Facebook, FreeBSD ஆல் பயன்படுத்தப்படுகிறது) — நூல்-உள்ளூர் தற்காலிக சேமிப்புகளுடன் கூடிய சிறுமணி அரங்க அமைப்பைப் பயன்படுத்துகிறது. ஆரம்ப ஓவர்ஹெட் அதிகமாக இருக்கும் (பெரும்பாலும் 200+ KB) ஆனால் பூட்டு தகராறு குறைவதால் சிறந்த பல-திரிக்கப்பட்ட செயல்திறனை வழங்குகிறது.
  • tcmalloc (Google's Thread-Caching Malloc) — ஆக்கிரமிப்பு முன்-ஒதுக்கீட்டுடன், முன்னிருப்பாக தோராயமாக 2 MB ஒரு த்ரெட் தற்காலிக சேமிப்பை ஒதுக்குகிறது. ஆரம்ப மேல்நிலை அதிகமாக உள்ளது, ஆனால் அடுத்தடுத்த சிறிய ஒதுக்கீடுகள் மிக வேகமாக இருக்கும்.
  • musl libc's malloc — அனைத்து ஒதுக்கீடுகளுக்கும் mmap அடிப்படையில் மிகவும் எளிமையான வடிவமைப்பைப் பயன்படுத்துகிறது. ஆரம்பக் கட்டணம் மிகக் குறைவு (பெரும்பாலும் ஒரு ஒதுக்கீட்டிற்கு 4 KB மட்டுமே), ஆனால் அடிக்கடி சிஸ்டம் அழைப்புகள் செய்வதால் ஒரு ஒதுக்கீட்டுச் செலவு அதிகமாகும்.
  • mimalloc (மைக்ரோசாப்ட்) — 64 MB பிரிவுகளுடன் பிரிவு அடிப்படையிலான ஒதுக்கீட்டைப் பயன்படுத்துகிறது. முதல் ஒதுக்கீடு 64 MB மெய்நிகர் முன்பதிவு (குறைந்த உடல் உறுதியுடன்), விதிவிலக்கான இருப்பிடம் மற்றும் செயல்திறன் ஆகியவற்றிற்கான வர்த்தக முகவரி இடத்தைத் தூண்டுகிறது.

இந்த ஒதுக்கீட்டாளர்களுக்கிடையேயான தேர்வு உங்கள் பணிச்சுமையைப் பொறுத்தது. கனமான மல்டி-த்ரெட் ஒதுக்கீட்டுடன் நீண்ட காலமாக இயங்கும் சர்வர் பயன்பாடுகளுக்கு, jemalloc அல்லது tcmalloc பொதுவாக glibc இன் இயல்புநிலையை விட சிறப்பாக செயல்படும். நினைவகம்-கட்டுப்படுத்தப்பட்ட உட்பொதிக்கப்பட்ட அமைப்புகளுக்கு, குறைந்த செயல்திறன் இருந்தாலும் musl இன் எளிமையான அணுகுமுறை விரும்பத்தக்கதாக இருக்கலாம். பெரும்பாலான பொது நோக்கத்திற்கான டெஸ்க்டாப் மற்றும் சர்வர் பயன்பாடுகளுக்கு, ptmalloc2 இன் 72 KB ஆரம்ப மேல்நிலையானது டியூனிங் இல்லாமல் நன்றாக வேலை செய்யும் ஒரு நியாயமான இயல்புநிலையைக் குறிக்கிறது.

ஆரம்ப ஒதுக்கீடு நடத்தையை சரிசெய்தல்

இயல்புநிலை 72 KB ஆரம்ப மேல்நிலையானது உங்கள் பயன்பாட்டு விஷயத்தில் உண்மையிலேயே சிக்கலாக இருந்தால் - ஒருவேளை நீங்கள் ஆயிரக்கணக்கான குறுகிய கால செயல்முறைகளை உருவாக்குகிறீர்கள், ஒவ்வொன்றும் ஒரு சில ஒதுக்கீடுகளை மட்டுமே செய்கிறீர்கள் - glibc mallopt() மற்றும் MALLOC_ சுற்றுச்சூழலின் மூலம் பல ட்யூனபிள்களை வழங்குகிறது.

M_TOP_PAD அளவுரு, உடனடியாகத் தேவைப்படுவதைத் தாண்டி ஒதுக்கீட்டாளர் எவ்வளவு கூடுதல் நினைவகத்தைக் கோருகிறார் என்பதைக் கட்டுப்படுத்துகிறது. mallopt(M_TOP_PAD, 0) உடன் 0 என அமைப்பது, ஒதுக்கீட்டாளரிடம் தேவையானதை மட்டும் கோருமாறு கூறுகிறது, ஆரம்ப மேல்நிலையை கணிசமாகக் குறைக்கிறது. M_MMAP_THRESHOLD அளவுருவானது, அரங்கிற்குப் பதிலாக mmap ஒதுக்கீடுகள் பயன்படுத்தும் அளவைக் கட்டுப்படுத்துகிறது. விடுவிக்கப்பட்ட நினைவகம் OS க்கு திரும்பும்போது M_TRIM_THRESHOLD கட்டுப்படுத்துகிறது. glibc 2.26 இலிருந்து, glibc.malloc.tcache_count மற்றும் glibc.malloc.tcache_max ட்யூனபிள்கள் த்ரெட் கேச் நடத்தையைக் கட்டுப்படுத்த உங்களை அனுமதிக்கின்றன.

இருப்பினும், ஒரு எச்சரிக்கை: கவனமாக தரப்படுத்தாமல் இந்த அளவுருக்களை சரிசெய்வது எப்போதும் விஷயங்களை மோசமாக்குகிறது. விரிவான நிஜ-உலக விவரக்குறிப்பின் அடிப்படையில் இயல்புநிலைகள் தேர்ந்தெடுக்கப்பட்டன, மேலும் அவை பெரும்பாலான பணிச்சுமைகளுக்கு இனிமையான இடத்தைப் பிரதிபலிக்கின்றன. malloc ஓவர்ஹெட் ஒரு இடையூறாக இருக்கிறது என்பதற்கான வலுவான ஆதாரம் உங்களிடம் இல்லை என்றால் - உங்கள் மாற்றங்களின் தாக்கத்தை நீங்கள் அளந்திருக்கவில்லை என்றால் - இயல்புநிலையை விட்டுவிடுங்கள். ஒதுக்கீட்டாளரின் முன்கூட்டிய மேம்படுத்தல் என்பது யாக் ஷேவிங்கின் குறிப்பாக நயவஞ்சகமான வடிவமாகும், இது மிகக் குறைவான நன்மைக்காக எண்ணற்ற பொறியியல் மணிநேரங்களை உட்கொண்டுள்ளது.

சிஸ்டம்ஸ் புரோகிராமிங் பற்றி இது நமக்கு என்ன கற்பிக்கிறது

72 KB முதல் ஒதுக்கீடு மர்மம், அதன் மையத்தில், சுருக்க அடுக்குகள் பற்றிய பாடமாகும். C++ ஆனது புதிய int 4 பைட்டுகளை ஒதுக்குகிறது என்ற மாயையை உங்களுக்கு வழங்குகிறது. மொழித் தரம் அப்படித்தான் சொல்கிறது. உங்கள் மன மாதிரி சொல்கிறது. ஆனால் உங்கள் குறியீடு மற்றும் வன்பொருளுக்கு இடையே அதிநவீன அமைப்புகளின் ஸ்டாக் உள்ளது - C++ இயக்க நேரம், C லைப்ரரி ஒதுக்கி, கர்னலின் மெய்நிகர் நினைவக துணை அமைப்பு மற்றும் வன்பொருளின் MMU மற்றும் TLB - ஒவ்வொன்றும் அதன் சொந்த நடத்தைகள், மேம்படுத்தல்கள் மற்றும் மேல்நிலை ஆகியவற்றைச் சேர்க்கிறது.

இது ஒரு குறை அல்ல. இது கணினி மென்பொருளின் முழு புள்ளியாகும். ஒவ்வொரு அடுக்கும் ஒரு உண்மையான சிக்கலைத் தீர்க்க உள்ளது: ஒதுக்கீட்டாளர் உள்ளது, எனவே நீங்கள் ஒவ்வொரு ஒதுக்கீட்டிற்கும் கணினி அழைப்புகளைச் செய்ய வேண்டியதில்லை. மெய்நிகர் நினைவக அமைப்பு உள்ளது, எனவே நீங்கள் நேரடியாக உடல் நினைவகத்தை நிர்வகிக்க வேண்டியதில்லை. பக்க தவறு கையாளுபவர் இருப்பதால் நினைவகம் சோம்பேறித்தனமாகவும் திறமையாகவும் செயல்படுகிறது. ஒவ்வொரு அடுக்கும் பெரிய அளவிலான செயல்திறன் மற்றும் வசதிக்காக சிறிய அளவிலான வெளிப்படைத்தன்மையை வர்த்தகம் செய்கிறது.

மிகவும் நம்பகமான, அதிக செயல்திறன் கொண்ட அமைப்புகளை உருவாக்கும் டெவலப்பர்கள், இந்த அடுக்குகளைப் புரிந்துகொள்பவர்கள் - அவர்கள் தொடர்ந்து அவற்றைப் பற்றி சிந்திக்க வேண்டும் என்பதற்காக அல்ல, மாறாக எதிர்பாராத ஏதாவது நிகழும்போது (ஒரு மர்மமான 72 KB ஒதுக்கீடு போன்றவை) ஏன் என்பதைப் புரிந்துகொள்வதற்கான மன மாதிரி அவர்களிடம் உள்ளது. நீங்கள் ஒரு நிகழ்நேர வர்த்தக அமைப்பு, ஒரு விளையாட்டு இயந்திரம் அல்லது ஆயிரக்கணக்கான பயனர்களுக்கு சேவை செய்யும் வணிகத் தளத்தை உருவாக்கினாலும், கணினி மட்டத்தில் உங்கள் குறியீடு உண்மையில் என்ன செய்கிறது என்பதைப் பற்றி நியாயப்படுத்தும் திறன், திறமையான டெவலப்பர்களை விதிவிலக்கானவர்களிடமிருந்து பிரிக்கிறது. 72 KB ஒரு பிழை அல்ல. உங்கள் ஒதுக்கீட்டாளர் தனது வேலையை அற்புதமாகச் செய்கிறார்.

உங்கள் வணிக OS இன்றே உருவாக்கவும்

Freelancers முதல் ஏஜென்சிகள் வரை, Mewayz 207 ஒருங்கிணைந்த தொகுதிகளுடன் 138,000+ வணிகங்களுக்கு அதிகாரம் அளிக்கிறது. இலவசமாகத் தொடங்குங்கள், நீங்கள் வளரும்போது மேம்படுத்தவும்.

Create

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime