Web appOpen in Telegram

Post🐘 چرا کپی کردن یک آرایه همیشه یعنی کپی شدن حافظه نیست؟

4 September 2026
C
CodeVerse | دنیای برنامه نویسان
🐘 چرا کپی کردن یک آرایه همیشه یعنی کپی شدن حافظه نیست؟ یکی از رفتارهای جالب PHP، مکانیزم Copy-on-Write هست. مثلاً: $data = range(1, 1_000_000); $copy = $data; شاید فکر کنی PHP همین لحظه یک آرایه‌ی یک میلیون‌عضوی دیگه داخل Memory ساخته. اما نه! 👀 حالا PHP تا وقتی داده تغییر نکرده، می‌تونه بین این دو متغیر از همان داده‌ی موجود استفاده کنه. $data = range(1, 1_000_000); $copy = $data; // هنوز الزاماً یک کپی کامل ساخته نشده اما داستان وقتی جالب میشه که یکی از آن‌ها را تغییر بدی: $copy[0] = 999; اینجاست که PHP باید وضعیت داده را طوری مدیریت کند که تغییر $copy روی $data تأثیر نگذارد. یعنی عملاً: $data ─────┐ ├──> Shared Memory $copy ─────┘ ↓ تغییر $data ─────────> Original Data $copy ─────────> New Copy حالا یک نکته‌ی مهم‌تر 👇 همین موضوع یکی از دلایلیه که این کد: function process(array $data) { // ... } لزوماً به این معنی نیست که با ورود $data به تابع، یک کپی کامل از آرایه ساخته می‌شود. زبانPHP می‌تواند تا زمانی که داده تغییر نکرده، از Copy-on-Write استفاده کند. اما اگر داخل تابع شروع به تغییر آرایه کنی: function process(array $data) { $data['status'] = 'done'; } شرایط Memory می‌تواند کاملاً متفاوت شود. 🔴 پس یک تصور اشتباه: «قابلیت Pass by Value یعنی PHP همیشه همان لحظه کل داده را کپی می‌کند.» نه لزوماً. در PHP، برای داده‌هایی مثل Array، مکانیزم Copy-on-Write باعث می‌شود کپی فیزیکی داده تا زمان نیاز به تغییر، به تعویق بیفتد. نکته‌ی Performance 🚀 اگر با آرایه‌های بزرگ، پردازش فایل، داده‌های API یا پردازش‌های سنگین کار می‌کنی، درک Copy-on-Write مهمه؛ چون ممکنه یک تغییر کوچک روی یک آرایه‌ی بزرگ، باعث افزایش قابل‌توجه مصرف Memory بشه. حرفه‌ای نوشتن PHP فقط کد نیست؛ باید بدونی Engine پشت این کد چه رفتاری داره. 🐘 @CodeVerse_dev
425 ·

Nearby in the feed

CCodeVerse | دنیای برنامه نویسانیه قابلیت عجیب JavaScript به اسم Closure 👀 فرض کن این کد رو داریم: function counter() { let count = 0; return function () { count++; return count; }; } const inCCodeVerse | دنیای برنامه نویسان🔐 یه نکته امنیتی که خیلی از توسعه‌دهنده‌های وردپرس نادیده می‌گیرن فرض کن یه Plugin داری که فقط برای یک صفحه خاص لازمه. ولی فایل‌های CSS و JavaScript اون Plugin
this message
CCodeVerse | دنیای برنامه نویسان🔐 یک API امن فقط با JWT ساخته نمی‌شود استفاده از JWT به این معنی نیست که API شما امن است. حالا JWT فقط یکی از روش‌های انتقال اطلاعات هویتی است. امنیت API باید چCCodeVerse | دنیای برنامه نویسان⚡ انتشار 8.5 فقط یک نسخه جدید نیست؛ بعضی قابلیت‌هایش روی نحوه نوشتن کد اثر می‌گذارند. یکی از قابلیت‌های جالب PHP 8.5: Pipe Operator به‌جای اینکه خروجی چند تابع
CCodeVerse | دنیای برنامه نویسانCodeVerse | دنیای برنامه نویسان@codeverse_dev · channel · Tech
1 060subscribers292average post reach
Venue feed Open in Telegram

An open public feed from the search index ChatCrawler — “Google for public Telegram”; refreshed as the venue is crawled. Times are UTC.

Public content only, official Telegram API. About · FAQ · Index limits · Remove a page · Catalog · Search · How we count