2015-04-15 46 views
0

據我所知,內聯函數在調用者中被代碼替換,這意味着用內聯函數編寫的任何代碼都位於最後一個函數的棧幀中。我碰巧遇到了需要動態分配內存而不使用malloc的情況。那麼,有沒有辦法讓我在內聯函數中分配一個可變長度的數組,並且在函數終止時讓它持久化 - 因爲堆棧並不真正展開。我們可以使用GCC的內聯函數來做到這一點嗎?

謝謝!

編輯:

我有一個名爲在信號處理方面的功能,通過SIGPOLL激活。它試圖從tcp套接字讀取數據。它讀取的數據被組織成我們想出的數據結構;假如你願意的話,人爲的「數據包」。不知道緩衝區中有多少數據,「數據包」邊界在哪裏,等等。它由信號處理程序調用,所以我們不能使用任何動態內存分配程序。

+0

如果你不想分配線程的函數棧幀([ALLOCA(http://linux.die.net/man/3/alloca))或進程堆([ malloc](http://linux.die.net/man/3/malloc)),剩下的是直接頁面([mmap](http://linux.die.net/man/3/malloc))。或者:擁有自己的全局內存池(堆或頁)並從那裏分配。但是,也許你可以給你更多的背景知道你實際想要達到的目標? – Jens

+0

你的意思是,當_inline_函數終止時,數組是否持續存在,而當外部函數終止時,該數組是否可用? – Jens

+0

@Jens Aye,確切地說。 – user3109672

回答

-1

嗯。這似乎是你想要的另一個方面。調用所有alloca函數來分配堆棧內存。當函數終止時,alloca()分配的內存會消失。它返回一個指針

請參閱此瞭解更多信息。另請注意,使用alloca可能會導致一些其他問題,所以它並不完美。

http://man7.org/linux/man-pages/man3/alloca.3.html

相關問題