ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 6 از 6
  1. #1
    2009/05/17
    225
    0

    ذخيره data در C

    data هايي که online داره توليد ميآ*شه رو چطوري توي c ذخيره ميآ*کنين؟
  2. #2
    2007/12/09
    تهران
    1,626
    18

    پاسخ : ذخيره data در C

    شما با کمک تابع malloc یه قسمتی از حافظه رو به صورت داینامیک در اختیار میگیرید. بعد به کمک یه پوینتر دیتا رو ذخیره میکنید. در آخر هم با تابع free میتونید فضا رو به سیستم برگردونید.
    اگر حجم داده هم زیاد نیست میتونید یه آرایه به صورت استاتیک تعریف کنید و از اون استفاده کنید. تو این روش در آخر کار حافظه آزاد نمیشه.
    روش اول دیتا رو تو heap نگه میداره ولی دومی تو stack.خودتون بر اساس نیاز و نوع دیتا و ..... یکی از این روش ها رو انتخاب کنید.
    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]
  3. #3
    2009/05/17
    225
    0

    پاسخ : ذخيره data در C

    از list و vector هم ميآ*تونم استفاده کنم؟ توي c++ منظورمه.. چطوري؟
  4. #4
    2007/12/09
    تهران
    1,626
    18

    پاسخ : ذخيره data در C

    نقل قول نوشته اصلی توسط negin-bahadori
    از list و vector هم ميآ*تونم استفاده کنم؟ توي c++ منظورمه.. چطوري؟
    شما گفته بودید C واسه همین من تابع malloc رو معرفی کردم وگرنه تو سی ++ راحت تر میتونید با new و delete حافظه رو به صورت داینامیک از حافظه بگیرید.
    شدنش که بله میشه اما این نکته رو یادتون باشه که کمی سرعت کار کمتر میشه به خاطر امکانات زیادی که این ها میدن. ولی اگه سرعت دریافت اونقدر بالا نیست و یا پردازنده به قدر کافی هست, این ها ساده تر میشه.
    اگر میخواید به صورت سطح بالا کار کنید و درگیر آدرس دهی و این حرف ها نشید, این سوال پیش میاد که وکتور یا لیست؟ ( یا حتی stack,queue ,string,deque,map,......)
    همه این ها data container های سی ++ هستند و بسته به این که دیتای دریافتی به چه شکل هست و چه جوری قرار هست خونده بشه,استفاده میشه. مثلا شما داده ها رو توی یه وکتور ذخیره میکنید. بعد از دریافت لازم میشه که چند تا ایتم رو از وسط این وکتور پاک کنید. به دلیل ماهیت وکتور برای پاک کردن یه ایتم تمام ایتم های بعد از این ایتم باید یه خونه حرکت کنند و این یعنی کلی انتقال بی مورد دیتا. تو همین مثال اگر به جای وکتور از لیست استفاده میشد برای پاک کردن یه ایتم به طور تصادفی از وسط لیست نیازی به جابجا کردن بقیه ایتم ها نیست! پس تو این مورد لیست مناسب تر هست.
    شما باید این که دیتا به چه شکل وارد میشن و به چه شکل استفاده میشن رو بررسی کنید تا بتونید یه container مناسب انتخاب کنید.
    قدیم ها یه تاپیک زده بودم و توابع string رو توضیح داده بودم. لینکش رو میزارم یه نگاهی بندازید. در تمام این کانتینر ها متد ها تقریبا شبیه هم هستند و با خوندن توضیحت اون تاپیک دیدتون به توابع باز تر میشه. برای اینکه در مورد این کانینر ها به طور کامل اطلاعات بگیرید هم لینک دوم عالیه!

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]
  5. #5
    2009/05/17
    225
    0

    پاسخ : ذخيره data در C

    wow..مرسيآ* از جوابتون
    ميآ*شه بگين فرق stack با heap چيه؟ و اينکه چه وقت اطلاعات توي stack و چه وقت اطلاعات توي heap ذخيره ميآ*شه؟
  6. #6
    2007/12/09
    تهران
    1,626
    18

    پاسخ : ذخيره data در C

    نقل قول نوشته اصلی توسط negin-bahadori
    wow..مرسيآ* از جوابتون
    ميآ*شه بگين فرق stack با heap چيه؟ و اينکه چه وقت اطلاعات توي stack و چه وقت اطلاعات توي heap ذخيره ميآ*شه؟
    به طور خلاصه میشه گفت که استک فضای آدرس دهی استاتیک هست ولی هیپ فضای داینامیک. حالا این یعنی چی؟! وقتی شما متغییری رو به صورت گلوبال تو برنامه به صورت معمول ( int a=3 ) تعریف میکنید, این متغییر در فضای استک به اندازه ی متغییر تعریف شده جا اشغال کرده. وقتی شما یه تابع رو صدا میزنید, آرگومان های اون از طریق استک به تابع منتقل میشه. حالا شما شرایطی رو در نظر بگبرید که به جای عدد صحیح یه ابجکت تعریف کردیم که 2 مگ از رم رو اشغال میکنه.مقدار داده ای که با هر بار صدا زدن تابع به استک اضافه میشه رو در نظر بگیرید......
    برای حل این مشکل آدرس دهی داینامیک رو ایجاد کردند. وقتی شما یه متغییر رو به صورت داینامیک ایجاد میکنید در فضای استک حجمی به اندازه یک پوینتر اشغال میکنه. وقتی اون رو مقدار دهی میکنید ( با صدا زدن تابع سازنده ابجکت) , در فضای هیپ اون ابجکت ساخته میشه و این که در کجای حافظه قرار گرفته در پوینتری که تو فضای استک ساخته شده بود قرار میگیره.حالا با صدا زدن توابع دیگر به جای انتقال یک ابجکت سنگین فقط یک پوینتر (4 بایت ) منتقل میشه.
    تو زبان هایی که سطح بالا تری دارند (مثل جاوا و سی شارپ) دیگه مفهومی به اسم پوینتر نداریم چون به طور پیش فرض آدرس دهی ها به صورت داینامیک صورت میگیره.مثلا تو زبان جاوا:
    Bitmap my_bitmap=null;
    با نوشتن این دستور اون پوینتری که صحبتش رو کردیم تو استک ساخته میشه و مقدار اون برابر 0 میشه که به این معنی این شی هنوز مقدار دهی نشده.
    تو توابعی این خط رو مینویسیم:
    my_bitmap=new Bitmap();
    با اجرای این دستور در هیپ این شی ساخته میشه و آدرس اون توی اون پوینتر قرار میگیره.شما این پوینتر رو هیچ وقت مستقیم بهش دسترسی ندارید اما سیستم داره از اون استفاده میکنه. ( برای اثباتش حالتی رو در نظر بگیرید که ابجکت هنوز برابر نال هست ولی شما یکی از متد های اون رو صدا میکنید.خیلی راحت با این کار سیستم کرش میکنه.چراش رو هم فکر کنم واضح هست)
    یه نکته جالب دیگه که این روش ایجاد میکنه این هست که با انتقال دادن اون از طریق تابع ها شی جدیدی ساخته نمیشه و عملیات روی همون شی انجام میشه. واسه همین وقتی یه شی رو به تابعی میفرستیم و اون تابع روی اون عملیاتی رو انجام میده, درآخر نیاز به return کردن اون شی نیست! همه ی بحث روی یه شی بوده و چیز جدیدی ایجاد نشده که برگردونده بشه!!!
    در این مورد کلی میشه حرف زد و مطالبی مثل garbage collector و.... رو بیان کرد که دیگه اینجا جاش نیست.( البته تو سی++ garbage collector نداریم و مدیریت حافظه با برنامه نویس هست!)
    خلاصه کنم مصالب رو!
    وقتی شما از توابع malloc ,free و کلمات کلیدی مثل new , delete استفاده نکردید! مقدار هیپ صفر هست. وقتی این ها وسط میان دیگه حجم هیپ و استک جدا جدا حساب میشه!
    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]
نمایش نتایج: از 1 به 6 از 6

موضوعات مشابه

  1. کاربرد مجموعه های Training Data,Validation Data,Test Data در کد نویسی با متلب
    توسط cooolman_ahv در انجمن هوش مصنوعی و شبکه های عصبی
    پاسخ: 18
    آخرين نوشته: 2015/08/23, 10:52
  2. معني RO-data و RW-data چيست؟
    توسط mohsenavr در انجمن NXP
    پاسخ: 2
    آخرين نوشته: 2013/11/23, 10:21
  3. data stack
    توسط electro_fuzzy در انجمن میکروکنترلرهای AVR
    پاسخ: 5
    آخرين نوشته: 2013/03/09, 21:14
  4. پاسخ: 1
    آخرين نوشته: 2012/05/09, 22:50
  5. active-low data و active-high data چيست؟ و سوالاتي در باره sn74181n
    توسط ShahinRad در انجمن مدار هاي ديجيتال
    پاسخ: 1
    آخرين نوشته: 2012/02/12, 23:23

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •