cuốn sách gpt4 ai đã làm

c++ - Căn chỉnh bộ nhớ - Trình biên dịch Sparc(Sun) cc, trình biên dịch Intel(Linux) g++, trình biên dịch MVSC Intel(Windows)

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 00:30:48 26 4
mua khóa gpt4 Nike

Câu hỏi của tôi bao gồm hai phần.

  1. Tôi nhận thấy rằng memalign(block_size,bytes) trên sparc(sun) sử dụng trình biên dịch cc không kiểm tra xem các byte có phải là lũy thừa của 2 hay không, không giống như memalign trên intel linux và _aligned_malloc trên Windows bằng cách sử dụng trình biên dịch mvsc để kiểm tra. Ngược lại, byte là lũy thừa của 2.

Đây có phải là lỗi của Sun không, có bản vá không, hay tôi cần phải tự viết memalign.

  1. Ngoài ra tôi có một cấu trúc (không phải mã của tôi):

    cấu trúc typedef CLHLockStruct {
    dễ bay hơi CLHLockNode CACHE_ALIGN *Đuôi;
    CLHLockNode dễ bay hơi CACHE_ALIGN *MyNode[N_THREADS];
    CLHLockNode CACHE_ALIGN dễ bay hơi *MyPred[N_THREADS];
    } CLHLockStruct;

Tôi đã biên soạn theo MVSC (visual studio 2008):

    CACHE_LINE_SIZE = 64
CACHE_ALIGN = __declspec(căn chỉnh(CACHE_LINE_SIZE))
N_THREADS = 8
sizeof(CLHLockStruct)=192

Mã ban đầu được viết cho kiến ​​trúc sparc và tôi đang cố di chuyển nó sang MVSC mà không thay đổi quá nhiều mã.

Trong mã của họ, họ sử dụng memalign(CACHE_LINE_SIZE,sizeof(CLHLockStruct)), tôi đã đổi nó thành _aligned_malloc, vấn đề của tôi là sizeof(CLHLockStruct) không phải là lũy thừa của 2, tôi có thể viết một số hàm để tìm lũy thừa tiếp theo của 2.

Họ có phải là một cách tiếp cận tốt hơn?

编辑1

Làm cách nào tôi có thể đệm cấu trúc này sao cho kích thước của nó là lũy thừa của 2?

EDIT2

Có chức năng nào tương tự như _aligned_malloc và malloc: trả về một con trỏ bộ nhớ được căn chỉnh theo bội số của block_size nhưng không yêu cầu byte phải có lũy thừa bằng 2 không?

câu trả lời hay nhất

trong mã của họ, họ sử dụng memalign(CACHE_LINE_SIZE,sizeof(CLHLockStruct)) và tôi đã đổi nó thành _aligned_malloc , vấn đề của tôi là sizeof(CLHLockStruct) không phải là lũy thừa của 2,

Bạn đã thay đổi nó thành _aligned_malloc(CACHE_LINE_SIZE,sizeof(CLHLockStruct))? Vâng, điều đó dẫn đến điều này. _aligned_mallocYêu cầu kích thước làm đối số đầu tiên và căn chỉnh làm đối số thứ hai, với memalign Thay vào đó, bạn cần trao đổi thông số. Kích thước không cần phải là lũy thừa của 2.

Về c++ - căn chỉnh bộ nhớ - Trình biên dịch Sparc (Sun), trình biên dịch Intel (Linux) g++, trình biên dịch MVSC Intel (Windows), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11858611/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress