C99 sử dụng một mảng có thể thay đổi kích cỡ mà bạn có thể sử dụng và tiếp tục đổi kích thước thành hình lớn hơn. Tuy nhiên mảng có thể thay đổi kích thước này được triển khai bằng cách sử dụng alloca
. Dưới đây là một mẫu mã trong UNIX env:
#include <stdio.h>
#include <alloca.h>
#include <stdlib.h>
#include <stdbool.h>
int
main()
{
while (true)
{
void *p = alloca(32UL);
printf("new memory allocated at %p \n", p);
}
exit(EXIT_SUCCESS);
}
Và đầu ra của bạn sẽ trông như thế này
new memory allocated at 0xbf800a60
new memory allocated at 0xbf800a30
new memory allocated at 0xbf800a00
new memory allocated at 0xbf8009d0
new memory allocated at 0xbf8009a0
[1] 3977 segmentation fault ./a.out
alloca
là trong gia đình malloc
chức năng, ngoại trừ việc nó được phân bổ bộ nhớ trên stack bằng cách điều chỉnh con trỏ ngăn xếp.
Nguồn
2012-04-11 09:28:10
Điều này sẽ ở trong môi trường Linux/UNIX. –
'alloca' và VLAs. – Mat