Vì lý do nào đó, tôi nên sử dụng gcc để biên dịch một tệp C, sau đó liên kết với dự án Visual C++ 2008.Làm thế nào để biên dịch GCC mà không có _alloca?
(Tôi sử dụng phiên bản gcc mới nhất hiện nay: Cygwin gcc 4.3.4 20090804.)
Nhưng có một vấn đề: gcc luôn phân bổ một mảng lớn với _alloca,
và VC mối liên kết không thể giải quyết biểu tượng __alloca.
ví dụ,
int func()
{
int big[10240];
....
}
mã này làm cho sự phụ thuộc _alloca mặc dù tôi đã không gọi hàm _alloca một cách rõ ràng.
(vấn đề kích thước mảng nếu tôi thay đổi 10.240 -.> 128, mọi thứ ok)
tôi đã cố gắng lựa chọn gcc -fno-BUILTIN-alloca hoặc -fno-BUILTIN, nhưng không có may mắn.
Có thể làm cho gcc không sử dụng _alloca không? (hoặc điều chỉnh ngưỡng?)
Tại sao không chỉ sử dụng 'malloc()' rõ ràng? –
Đó không phải là nguồn viết của tôi và có phần phức tạp để chỉnh sửa. và có lẽ tác giả ban đầu không muốn hình phạt gọi malloc. – shkim
Mục đích của alloca trong trường hợp này là để đảm bảo ngăn xếp đủ lớn để giữ mảng này. Trình biên dịch của Microsoft không cần alloca; nó phát ra mã thăm dò ngăn xếp này trực tiếp vào hàm. Đầu dò ngăn xếp không cần thiết khi người dân địa phương nhỏ. Điều gì sẽ xảy ra nếu bạn không sử dụng -fno-buildin-alloca và -fno-builtin? –