سلام به همه و عید فطر مبارک
در برنامه نویسی به موضوعی برخورد کردم که تابحال راه حل ساده ای براش پیدا نکردم!
تابع زیر رو در نظر بگیرید: (تابعی جهت ارسال یک رشته)
void send_str(char *const pStr, const int lenStr);
یه تابع ساده که دوتا آرگومان داره:
اولی یک اشاره گر به یک رشته هستش. (اون کلمه const که بعد از علامت “*” اومده باعث میشه از تغییر دادن آدرس درون اشاره گر جلوگیری بشه تا مطمئن باشیم به طور اشتباهی درون تابع آدرس اشاره گر تغییر نمیکنه)
دومی طول دیتا جهت ارسال رو مشخص میکنه.
-----------------------------
مشکل: وقتی از این تابع به شکل زیر استفاده بشه:
send_str( “salam”, 5);
رشته salam ارسال میشه و به میزان 5 Byte از ram اشغال میشه.
حالا اگر دوبار از این تابع استفاده بشه:
send_str( “salam”, 5); send_str( “salam”, 5);
رشته test1 ارسال میشه اما این بار 10 Byte از Ram اشغال میشه.
درواقع پس از هر بار استفاده از این تابع شاهد این هستیم که ram اشغالی هم افزایش پیدا میکنه.
برای رفع این مشکل اشغال زیاد ram اومدم یه رشته به طول طولانی ترین متن ایجاد کردم و هر بار که قصد ارسال متنی رو دارم اول اون متن رو به صورت کاراکتر به کاراکتر درون اون رشته قرار میدم وبعد اراسل میکنم.
اینجوری تنها به اندازه اون رشته فضای ram اشغال شده.
مثال از این روش:
char mainStr[10] = “123”; //10 Byte use of Ram send_str( mainStr, 3); //not need to use new Ram. str[0] = ‘s’; str[1] = ‘a’; str[2] = ‘l’; str[3] = ‘a’; str[4] = ‘m’; send_str( mainStr, 5); //not need to use new Ram. send_str( mainStr, 5); //not need to use new Ram.
مزیت این کار: اشغال شدن ram تنها به اندازه رشته ای که برای ارسال متن ها ساختیم.
عیب کار: وقتی با یه متن طولانی روبه رو میشیم بار گذاری اون متن طولانی درون رشته خیلی وقت گیر هست.(فکر کنید بخوایم 200 متن 300 کاراکتری رو ارسال کنیم)
دوستان راه حلی برای این هست که بشه به شیوه دیگه ای این کار رو کرد تا رم زیادی اشغال نشه و تا این حد هم استفاده وقت گیر نشه؟