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

memcpy chồng chéo segfault trong mmap

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 06:07:25 66 4
mua khóa gpt4 Nike

Tôi đã gặp phải một vấn đề về mmap mà dường như tôi không thể giải quyết được. Đây là cách thiết lập: Tôi sử dụng malloc để phân bổ một mảng đa chiều khổng lồ vào bộ nhớ, điền vào đó các giá trị của mình và sau đó tôi muốn lưu nó vào một tệp. Mảng chứa 3200000000 byte. Máy là 64-bit và có đủ bộ nhớ.

Linux 2.6.32-27-server #49-Ubuntu SMP Thứ Năm ngày 2 tháng 12 02:05:21 UTC 2010 x86_64 GNU/Linux

Tạo tệp bằng mmap hoạt động tốt, tôi nhận được con trỏ ptrFile. Khi tôi ghi nhớ mảng của mình vào con trỏ ptrFile đó, chương trình gặp sự cố với lỗi phân đoạn.

Sau vài lần gỡ lỗi, tôi thấy rằng hai bộ đệm bị chồng lên nhau. Mảng dữ liệu bắt đầu tại địa chỉ 0x7FEC47FFF010 và con trỏ được mmap trả về là 0x7FEA2543E000. Tôi đã thử sử dụng memmove để giải quyết vấn đề này nhưng kết quả vẫn như vậy. Nếu tôi giới hạn kích thước của bản sao thành tệp ở mức 1000 byte thì nó hoạt động tốt.

Tại sao hai con trỏ được phân bổ chồng lên nhau?

Cảm ơn bạn rất nhiều!

--J

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

những vùng nhớ đóKHÔNGchồng chéo lên nhau (miễn là bạnmmap khối là kích thước bạn đang nói đến). 0x7FEC47FFF010 - 0x7FEA2543E000 = 9.172.684.816 , điều này tốt hơn 3.200.000.000 Kích thước lớn hơn nhiều so với những gì bạn đề cập.

Về segfault chồng chéo memcpy trong c - mmap, 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/7345114/

66 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
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