Tôi đang tìm cách gọi hàm C trong một ngăn xếp khác, tức là lưu con trỏ ngăn xếp hiện tại, đặt con trỏ ngăn xếp đến một vị trí khác, gọi hàm và khôi phục con trỏ ngăn xếp cũ khi nó trở về.Gọi hàm C với con trỏ ngăn xếp khác nhau (gcc)
Mục đích của việc này là một hệ thống luồng nhẹ cho một ngôn ngữ lập trình. Các luồng sẽ hoạt động trên các ngăn xếp rất nhỏ, kiểm tra khi cần thêm stack và tự động thay đổi kích thước của nó. Điều này là để hàng ngàn chủ đề có thể được phân bổ mà không lãng phí rất nhiều bộ nhớ. Khi gọi đến mã C, không an toàn khi sử dụng một ngăn xếp nhỏ, vì mã C không biết về kiểm tra và thay đổi kích thước, vì vậy tôi muốn sử dụng ngăn xếp lớn được sử dụng chỉ để gọi C (được chia sẻ giữa các chuỗi nhẹ trên cùng một pthread).
Bây giờ tôi có thể viết các đoạn mã lắp ráp sẽ hoạt động tốt, nhưng tôi tự hỏi liệu có cách nào tốt hơn để làm điều này, chẳng hạn như phần mở rộng gcc hoặc thư viện đã triển khai nó. Nếu không, sau đó tôi đoán tôi sẽ có đầu của tôi chôn trong ABI và hướng dẫn sử dụng ngôn ngữ lắp ráp ;-) Tôi chỉ yêu cầu này ra khỏi sự lười biếng và không muốn phát minh lại bánh xe.
Bạn có thể thực hiện "chuỗi chủ đề" của riêng mình với ngăn xếp được cá nhân hóa bằng syscall bản sao. Nếu bạn sử dụng lệnh gọi hệ thống trực tiếp thay vì trình bao bọc libc, nó hoạt động khá giống với ngã ba ngoại trừ việc bạn có thể chỉ định tài nguyên và không gian tên nào được chia sẻ. – technosaurus