PDA

View Full Version : new & Malloc



بمب منطقی
جمعه 26 خرداد 1385, 19:09 عصر
سلام
تفاوت این دو خط دستور رو از نظر:
1- سیستم و حافظه
2-سرعت اجرا
بفرمائید.


int *ptr;

ptr=new (int*5);
یا
ptr=(int*)malloc(sizeof(int)*5);


با تشکر فراوان

BitMap
یک شنبه 11 تیر 1385, 20:08 عصر
تفاوتی ندارند
فقط new ایمن تر است
چون دیگه تبدیل نوع نداره (به خاطر سربارگذاری اون)

mzjahromi
دوشنبه 12 تیر 1385, 05:50 صبح
با اجازه استاد عزیز که قبل از به هم ریختن این فروم پاسخ رو داده بودند

سلام
تفاوت این دو خط دستور رو از نظر:
1- سیستم و حافظه
2-سرعت اجرا
بفرمائید
تفاوتی نمی کنه.
خانواده Malloc مربوط به C میشه و New مال C++ هست.

BitMap
دوشنبه 12 تیر 1385, 07:27 صبح
با اجازه استاد عزیز که قبل از به هم ریختن این فروم پاسخ رو داده بودند

منظور تان چیست؟

mzjahromi
دوشنبه 12 تیر 1385, 09:16 صبح
منظورم شما نیست
اگر دقت کنید این تاپیک ما 17 روز پیشه. اون موقع یکی از اساتید جواب این سوال رو داده بودند

C++Lover
چهارشنبه 14 تیر 1385, 02:13 صبح
از مسئله قدیمی بودن topic که بگذریم همون طور که دوستان گفتند در کدی که نوشته شده فرقی نمیکند. اما در کل new برای object از نوع یا

کلاس ذکر شده حافظه اختصاص داده و سپس آن را بوسیله constructor ذکر شده یا default constructor مقدار دهی اولیه (initialize) می کند اما

بوسیله malloc فقط میتوانیدحافظه روی heap اختصاص دهید و نه چیز دیگر. از لحاظ تئوری new از malloc کندتر است اما از دید object oriented

همان طور که دوستمان فرمودند بهتر است از new استفاده کنید چون مطمئن تر و خواناتر و کاراتر است. در ضمن new یک عملگر است و قابل

سربارگذاری. مثلاً


class Blanks
{
public:
Blanks(){}
void *operator new( size_t stAllocateBlock, char chInit );
};
void *Blanks::operator new( size_t stAllocateBlock, char chInit )
{
void *pvTemp = malloc( stAllocateBlock );
if( pvTemp != 0 )
memset( pvTemp, chInit, stAllocateBlock );
return pvTemp;
}
// For discrete objects of type Blanks, the global operator new function
// is hidden. Therefore, the following code allocates an object of type
// Blanks and initializes it to 0xa5
int main()
{
Blanks *a5 = new(0xa5) Blanks;
return a5 != 0;
}


++C دست برنامه نویس را برای استفاده از خیلی چیزها باز میگذارد و او را محدود نمیکند. به همین دلیل است که میگویند در ++C کاملا فرض

شده که برنامه نویس می داند چه میخواهد و می داند چه باید بکند. و این وظیفه برنامه نویس است که بداند از چه چیزی در کجا استفاده کند. بدون

شک در این گونه برنامه نویسی احتمال خطا بیشتر است و برنامه نویسان باید تسلط و تجربه زیادی داشته باشند.