Tại sao các nguyên tử xây dựng GCC cần một phiên bản bổ sung chung chung của cải tiến?


8

Theo https://gcc.gnu.org/onlinesocs/gcc/_005f_005fatomic-Builtins.html , có:

type __atomic_load_n (type *ptr, int memorder)

và ("chung chung"):

void __atomic_load (type *ptr, type *ret, int memorder)

sau đó

void __atomic_store_n (type *ptr, type val, int memorder)

và ("cái chung")

void __atomic_store (type *ptr, type *val, int memorder)

Vân vân.

Những gì là chung chung về các phiên bản sau (không phải là chung chung về các phiên bản trước) và tại sao chúng cần thiết?

Câu trả lời:


4

Câu trả lời là đúng trong hướng dẫn sử dụng GCC trong phần 6.55 , cho biết:

Các nội dung '__atomic' có thể được sử dụng với bất kỳ loại vô hướng hoặc con trỏ tích phân nào có độ dài 1, 2, 4 hoặc 8 byte. Các loại tích phân 16 byte cũng được cho phép nếu '__int128' (xem __int128) được kiến ​​trúc hỗ trợ.

Bốn hàm không số học (tải, lưu trữ, trao đổi và so sánh_exchange) đều có một phiên bản chung. Phiên bản chung này hoạt động trên bất kỳ loại dữ liệu. Nó sử dụng chức năng tích hợp không khóa nếu kích thước loại dữ liệu cụ thể làm cho điều đó có thể; nếu không, một cuộc gọi bên ngoài sẽ được giải quyết trong thời gian chạy. Cuộc gọi bên ngoài này có cùng định dạng với việc thêm tham số 'size_t' được chèn làm tham số đầu tiên cho biết kích thước của đối tượng được trỏ đến. Tất cả các đối tượng phải có cùng kích thước.


Đối với tôi có vẻ như không cần phải có hai phiên bản cho việc này. Chắc chắn, với các hàm, sẽ là khôn ngoan khi lấy các đối tượng lớn bằng cách tham chiếu, nhưng đây là các phần tử trình biên dịch. Một trình biên dịch sẽ có thể sử dụng các con trỏ bên trong khi cần mà không phải làm phiền người dùng với hai API.
PSkocik

1
@PSkocik nhún vai Tôi chắc chắn có một số lý do đằng sau lý do tại sao họ chọn không làm điều đó (các nhóm biên dịch thường có một số chính sách đằng sau lý do tại sao họ chọn một cơ chế hơn một cơ chế khác). Nếu bạn thực sự tò mò về điều đó, thì tôi khuyến khích bạn tiếp cận cộng đồng gcc (thông qua danh sách gcc của họ - xem trang danh sách gửi thư ). Đã được một thời gian kể từ khi tôi tương tác với cộng đồng gcc, nhưng tôi đã thấy chúng dễ chịu và hữu ích trong quá khứ.
John Szakmeister
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.