مقدار دادن به متغیر ها

سلام وقت بخیر
وقتی به متغیری مقدار میدیم در عمل چه اتفاقی می‌افته؟
اگه توی یک حلقه دائما یه مقدار ثابت به متغیر بدیم مشکلی پیش میاد؟

    int x = 0;
    while(1)
    {
        if(x >= 5)
        {
            ...;
        }
        x = 0;
    }
    int x = 0;
    while(1)
    {
        if(x >= 5)
        {
            ...;
        }
        if(x != 0) x = 0;
    }

این دو کد تفاوت خاصی در عمل دارن یا نه، مشکلی وجود نداره؟

سلام دوست عزیز
نوشتن مداوم داخل یک متغیر در رم مشکلی پیش نمیاره اگر روی حافظه‌هایی که محدودیت نوشتن دارند (مثل EEPROM) مدام بنویسید امکان سوختن اون خانه حافظه وجود داره اما روی خانه‌های حافظه رم مشکلی پیش نمیاد.

3 پسندیده

سلام
هر پردازنده برا خودش معماری داخلی خاصی داره اما عمدتا یکی هستند، بعنوان مثال در میکروهای ARM اینطوریه که وقتی به متغیری مقدار میدیم اون مقدار تبدیل به مدل باینری یعنی 0 و 1 میشه و خانه های حافظه SRAM رو پر میکنه یعنی پردازنده کاری که شما میکنید رو بدین صورت میفهمه و برا خودش اجرا میکنه:
int X=0 => 0000 0000 0000 0000
int X=5 => 0000 0000 0000 0101
int X=0 => 0000 0000 0000 0000
منظورتون از اینکه اگر دائما یک مقدار ثابت به متغیر بدیم چه مشکلی پیش میاد رو نمیفهمم اگر منظورتون صفر کردن مقدار متغیر در انتهای شرط هست باید عرض کنم “تا وقتی اصول برنامه نویسی و استفاده از فضای SRAM شامل HEAP & STACK رو رعایت کرده باشی مشکلی پیش نمیاد” این مورد که عرض کردم مربوط به برنامه های حجیم و بزرگه، در برنامه های آزمایشی و کوچک و میکروهای با حافظه بالا ندرتا مشکل میخورید مگر اینکه اصول ابتدایی برنامه نویسی مثل حلقه بی نهایت و غیره رو رعایت نکرده باشید.

1 پسندیده

ممنون بابت توضیحاتتون

توی برنامه گفتم منظورم از حرفم چیه!
اگه دائما توی حلقه یه متغیر رو برابر با مقدار ثابتی بزاریم مشکلی به وجود میاد؟! یعنی همونطور که دوستمون گفتن مثل حافظه های eeprom محدودیت خاصی وجود داره یا نه

توی خوندن از حافظه ها شنیدم محدودیتی وجود نداره و میشه بینهایت مقدارو بخونیم
ولی توی رایت کردن محدودیت وجود داره، برای همین توی مثال گفتم هروقت مخالف بود صفر بشه(یا هر عدد دیگه)

حالا سوال اصلی اینه که برنامه دوم به جز اینکه وقت زیاد تری از میکرو میگیره تا مقدار بخونه، عملکرد بهتری داره یا نه؟

سلام
بله در حافظه های EEOROM محدودیت در نوشتن داریم (مثلا اکثر آیسی های EEPROM شرکت ATMEL رو میشه 1 میلیون بار نوشت) اما در حافظه RAM مشکلی نداره.

سئوال شما به بهینه نویسی کد میپردازه و این به پروژه و بقیه کدهای اون پروژه بستگی داره.

کلا هر عبارت یا کدی که شما اضافه میکنی از پردازنده انرژی میگیره برای اسکن و تفسیر و هر چه با شرط گذاری پیچیده ترش کنی این زمان بیشتر میشه.

مثلا کد اول شما سریعتر اجرا میشه چون در انتها بدون چک کردن شرط متغیر رو صفر میکنه اما در کد دوم در انتها شرط رو چک میکنه و در صورت درست بودن متغیر رو صفر میکنه که این خودش زمان بیشتری (در حد نانوثانیه) و حجم بیشتری (در حد بیت) از میکرو میگیره که این موضوع در برنامه های بزرگ و پیچیده و میکروهای ضعیف خودش رو نشون میده نه برنامه های کوچک و میکروهای قوی.

اما در عوض کد دوم دقت بیشتری داره و این که شما بخوای سرعت رو فدای دقت و حجم کنی بستگی به نوع پروژتون داره.

3 پسندیده