第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么使用Alloca()不被視為良好做法?

為什么使用Alloca()不被視為良好做法?

C
DIEA 2019-06-21 17:01:11
為什么使用Alloca()不被視為良好做法?alloca()在堆棧上分配內(nèi)存,而不是在堆上分配內(nèi)存,如malloc()..所以,當(dāng)我從例程返回時(shí),內(nèi)存就被釋放了。因此,實(shí)際上這解決了我釋放動(dòng)態(tài)分配內(nèi)存的問(wèn)題。釋放通過(guò)malloc()是一個(gè)主要的頭痛,如果某種程度上錯(cuò)過(guò)會(huì)導(dǎo)致各種記憶問(wèn)題。為什么使用alloca()盡管有上述特點(diǎn),但還是氣餒?
查看完整描述

3 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

答案就在man頁(yè)(至少在linux):

返回值-Alloca()函數(shù)返回指向分配空間開(kāi)頭的指針。如果分配導(dǎo)致堆棧溢出,則程序行為未定義。

這并不是說(shuō)它不應(yīng)該被使用。我從事的一個(gè)開(kāi)放源碼軟件項(xiàng)目廣泛使用它,只要您不濫用它(alloca),這很好。一旦你超過(guò)了“幾百字節(jié)”的標(biāo)記,就該使用它了。malloc而是朋友。您可能仍然會(huì)遇到分配失敗,但至少您將有一些失敗的跡象,而不是只是吹出堆棧。


查看完整回答
反對(duì) 回復(fù) 2019-06-21
?
料青山看我應(yīng)如是

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊

我最難忘的錯(cuò)誤之一是與一個(gè)內(nèi)聯(lián)函數(shù)有關(guān),該函數(shù)使用alloca..它表現(xiàn)為程序執(zhí)行過(guò)程中隨機(jī)點(diǎn)的堆棧溢出(因?yàn)樗诙褩I戏峙?。

在頭文件中:

void DoSomething() {
   wchar_t* pStr = alloca(100);
   //......}

在實(shí)現(xiàn)文件中:

void Process() {
   for (i = 0; i < 1000000; i++) {
     DoSomething();
   }}

所以所發(fā)生的是編譯器的內(nèi)聯(lián)DoSomething函數(shù)和所有堆棧分配都發(fā)生在內(nèi)部。Process()函數(shù),從而將堆棧放大。在我的辯護(hù)中(我不是那個(gè)發(fā)現(xiàn)問(wèn)題的人,我不得不去找一個(gè)無(wú)法解決的高級(jí)開(kāi)發(fā)人員),這是不對(duì)的。alloca,它是ATL字符串轉(zhuǎn)換宏之一。

所以教訓(xùn)是-不要用alloca在你認(rèn)為可能是內(nèi)聯(lián)的函數(shù)中。


查看完整回答
反對(duì) 回復(fù) 2019-06-21
?
ibeautiful

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊

舊的問(wèn)題,但沒(méi)有人提到,它應(yīng)該被替換為可變長(zhǎng)度數(shù)組。

char arr[size];

而不是

char *arr=alloca(size);

它在標(biāo)準(zhǔn)的C99中,在許多編譯器中作為編譯器擴(kuò)展而存在。


查看完整回答
反對(duì) 回復(fù) 2019-06-21
  • 3 回答
  • 0 關(guān)注
  • 1616 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)