Tôi đã đọc khá nhiều nơi mà alloca
đã lỗi thời và không nên được sử dụng và Mảng độ dài biến nên được sử dụng thay thế.Alloca có thể thay thế hoàn toàn không?
Câu hỏi của tôi là: alloca
có thể thay thế hoàn toàn bằng mảng chiều dài thay đổi không?
Trong trường hợp đặc biệt của tôi, tôi có cái gì đó trông như thế này:
typedef struct {
int *value;
size_t size;
} some_type;
void SomeExternalFunction(some_type);
...
void foo(){
//What I thought to do
some_type bar;
bar.value=alloca(sizeof(int)*10);
SomeExternalFunction(bar);
//what should be done without alloca
some_type fizz;
int tmp[10];
fizz.value=tmp;
SoemExternalFunction(fizz);
}
Tôi có thiếu một cái gì đó hoặc đây là một sử dụng tốt thực tế của alloca? Cũng giả sử cho ví dụ này vì lý do nào đó tôi muốn cho giá trị được phân bổ trên ngăn xếp
Đó không phải là mảng có độ dài thay đổi ... Như bạn đã chỉ định độ dài không đổi. Và ... Ngay cả khi nó * là * một chiều dài thay đổi, tôi không thực sự nhìn thấy những gì alloca mua bạn ở đây, khác hơn là làm cho ý định của mã hơi mơ hồ hơn. (Rõ ràng nếu bạn đang sử dụng một trình biên dịch không hỗ trợ các mảng độ dài biến đổi, bạn cũng không có sự lựa chọn giữa hai loại) – Shog9
Xem thêm: http://stackoverflow.com/questions/3452434/in-which- trường hợp-là-alloca-hữu ích (sẽ là một bản sao dựa trên tiêu đề, nhưng tôi cảm thấy bạn đang thực sự cố gắng để yêu cầu cái gì khác ... không thể nói những gì mặc dù) – Shog9