اندازه انواع داده با sizeof

اندازه انواع داده با sizeof در زبان C

در زبان برنامه‌نویسی C، عملگر sizeof یکی از ابزارهای اساسی برای تعیین اندازه انواع داده‌ها و متغیرها در حافظه است. این عملگر در زمان کامپایل ارزیابی می‌شود و نتیجه آن به صورت یک مقدار صحیح بدون علامت (از نوع size_t) برمی‌گردد.

مهم: اندازه انواع داده‌ها ممکن است بر اساس معماری پردازنده و کامپایلر متفاوت باشد. برای اطلاعات دقیق‌تر می‌توانید اینجا را بخوانید.

کاربردهای اصلی sizeof

  • تعیین اندازه انواع داده‌های پایه (int, char, float, ...)
  • محاسبه اندازه ساختارها (struct) و اتحادها (union)
  • تعیین اندازه آرایه‌ها و اشاره‌گرها
  • تخصیص حافظه پویا با توابعی مانند malloc
نوع داده اندازه معمول (بایت) محدوده مقدار
char 1 -128 تا 127
int 4 -2,147,483,648 تا 2,147,483,647
float 4 3.4E-38 تا 3.4E+38

نکات مهم در استفاده از sizeof

  1. اندازه انواع داده‌ها به معماری سیستم (32-bit یا 64-bit) بستگی دارد
  2. برای اشاره‌گرها، اندازه همیشه ثابت است و به نوع اشاره‌گر بستگی ندارد
  3. در مورد آرایه‌ها، sizeof اندازه کل آرایه را برمی‌گرداند نه تعداد عناصر
  4. برای ساختارها ممکن است به دلیل padding اندازه واقعی بیشتر از مجموع اعضا باشد

مثال کاربردی: برای محاسبه تعداد عناصر یک آرایه می‌توانید از فرمول sizeof(arr)/sizeof(arr[0]) استفاده کنید. این روش به خصوص هنگام کار با آرایه‌های محلی بسیار مفید است.


تفاوت sizeof با strlen

بسیاری از برنامه‌نویسان تازه‌کار بین sizeof و strlen در کار با رشته‌ها اشتباه می‌کنند. در حالی که sizeof اندازه کل حافظه تخصیص یافته را برمی‌گرداند، strlen طول رشته تا کاراکتر null را محاسبه می‌کند.

برای مثال در مورد یک رشته مانند "Hello":

  • sizeof مقدار 6 را برمی‌گرداند (5 کاراکتر + کاراکتر null)
  • strlen مقدار 5 را برمی‌گرداند (فقط کاراکترهای قابل نمایش)

درک صحیح از sizeof و کاربردهای آن می‌تواند به شما در نوشتن کدهای بهینه‌تر و قابل حمل‌تر کمک کند. برای جزئیات بیشتر درباره پیاده‌سازی این عملگر در پلتفرم‌های مختلف، پیشنهاد می‌کنیم مقاله اینجا را بخوانید را مطالعه کنید.