Bộ đệm Python là gì?

Các đối tượng Python được triển khai trong C có thể xuất “giao diện bộ đệm. ” Các chức năng này có thể được sử dụng bởi một đối tượng để hiển thị dữ liệu của nó ở định dạng thô, hướng theo byte. Khách hàng của đối tượng có thể sử dụng giao diện bộ đệm để truy cập dữ liệu đối tượng trực tiếp mà không cần sao chép dữ liệu trước

Hai ví dụ về các đối tượng hỗ trợ giao diện bộ đệm là byte và mảng. Đối tượng byte hiển thị nội dung ký tự ở dạng hướng byte của giao diện bộ đệm. Một mảng cũng có thể hiển thị nội dung của nó, nhưng cần lưu ý rằng các phần tử mảng có thể là các giá trị nhiều byte

Ví dụ người dùng của giao diện bộ đệm là phương thức write[] của đối tượng tệp. Bất kỳ đối tượng nào có thể xuất một loạt byte thông qua giao diện bộ đệm đều có thể được ghi vào một tệp. Có một số mã định dạng hoạt động dựa trên giao diện bộ đệm của đối tượng, trả về dữ liệu từ đối tượng đích.

Thông tin thêm về giao diện bộ đệm được cung cấp trong phần , bên dưới phần mô tả cho

Các đối tượng bộ đệm rất hữu ích như một cách để hiển thị dữ liệu từ giao diện bộ đệm của một đối tượng khác cho lập trình viên Python. Chúng cũng có thể được sử dụng như một cơ chế cắt không sao chép. Sử dụng khả năng tham chiếu một khối bộ nhớ của họ, có thể hiển thị bất kỳ dữ liệu nào cho lập trình viên Python khá dễ dàng. Bộ nhớ có thể là một mảng lớn, không đổi trong phần mở rộng C, nó có thể là một khối bộ nhớ thô để thao tác trước khi chuyển đến thư viện hệ điều hành hoặc nó có thể được sử dụng để chuyển dữ liệu có cấu trúc ở định dạng trong bộ nhớ gốc của nó

Py_buffervoid *bufA con trỏ tới đầu bộ nhớ cho đối tượng. Py_ssize_t lenTổng chiều dài của bộ nhớ tính bằng byte. int readonlyMột chỉ báo cho biết bộ đệm có chỉ đọc hay không. const char *formatA Chuỗi kết thúc NULL theo cú pháp kiểu mô-đun cung cấp nội dung của các phần tử có sẵn thông qua bộ đệm. Nếu đây là NULL, "B" [byte không dấu] được giả định. int ndimSố thứ nguyên mà bộ nhớ biểu diễn dưới dạng một mảng nhiều chiều. Nếu nó là 0, và phải là NULL. Py_ssize_t *shapeMột mảng gồm Py_ssize_t s độ dài của hình dạng bộ nhớ dưới dạng mảng nhiều chiều. Lưu ý rằng [[*shape][0] * . * [*shape][ndims-1]]*itemsize phải bằng len . Py_ssize_t *stridesMột mảng gồm Py_ssize_ts độ dài của việc đưa ra số byte cần bỏ qua để đến phần tử mới trong mỗi thứ nguyên. Py_ssize_t *độ lệch con

Một mảng gồm Py_ssize_t độ dài của. Nếu các số phần bù con này lớn hơn hoặc bằng 0, thì giá trị được lưu trữ dọc theo thứ nguyên được chỉ định là một con trỏ và giá trị phần bù con cho biết cần thêm bao nhiêu byte vào con trỏ sau khi bỏ tham chiếu. Một giá trị bù trừ con mà nó âm cho biết rằng không xảy ra hủy tham chiếu [dải trong một khối bộ nhớ liền kề].

Đây là một hàm trả về một con trỏ tới phần tử trong một mảng N-D được trỏ tới bởi một chỉ số chiều N khi có cả các bước và tập con không phải NULL

void *get_item_pointer[int ndim, void *buf, Py_ssize_t *strides,
    Py_ssize_t *suboffsets, Py_ssize_t *indices] {
    char *pointer = [char*]buf;
    int i;
    for [i = 0; i =0 ] {
            pointer = *[[char**]pointer] + suboffsets[i];
        }
    }
    return [void*]pointer;
 }

Py_ssize_t itemsizeĐây là nơi lưu trữ kích thước item [tính bằng byte] của từng thành phần trong bộ nhớ dùng chung. Về mặt kỹ thuật, nó không cần thiết vì nó có thể được lấy bằng cách sử dụng , tuy nhiên, nhà xuất khẩu có thể biết thông tin này mà không cần phân tích cú pháp chuỗi định dạng và cần phải biết kích thước mặt hàng để giải thích đúng cách. Do đó, lưu trữ nó thuận tiện hơn và nhanh hơn. void *internal Cái này được sử dụng nội bộ bởi đối tượng xuất khẩu. Ví dụ: giá trị này có thể được nhà xuất khẩu truyền lại dưới dạng số nguyên và được sử dụng để lưu trữ các cờ về việc có hay không giải phóng các mảng hình dạng, sải chân và tập con khi bộ đệm được giải phóng. Người tiêu dùng không bao giờ nên thay đổi giá trị này

Các chức năng liên quan đến bộ đệm

int PyObject_CheckBuffer[ *obj]Return 1 nếu obj hỗ trợ giao diện bộ đệm nếu không thì 0. int PyObject_GetBuffer[ *obj, *view, int flags]

Xuất obj thành , xem. Các đối số này không bao giờ được là NULL. Đối số flags là một trường bit cho biết loại bộ đệm mà người gọi chuẩn bị xử lý và do đó, loại bộ đệm nào mà nhà xuất khẩu được phép trả về. Giao diện bộ đệm cho phép các khả năng chia sẻ bộ nhớ phức tạp, nhưng một số người gọi có thể không xử lý được tất cả sự phức tạp nhưng có thể muốn xem liệu nhà xuất khẩu có cho phép họ xem bộ nhớ đơn giản hơn không

Bộ đệm trong lập trình là gì?

Trong khoa học máy tính, bộ đệm dữ liệu [hoặc chỉ bộ đệm] là một vùng của bộ nhớ được sử dụng để lưu trữ tạm thời dữ liệu trong khi dữ liệu được di chuyển từ nơi này sang nơi khác.

Bộ đệm đầu ra Python là gì?

Tóm tắt. Bộ đệm đầu ra của Python là quá trình lưu trữ đầu ra mã của bạn trong bộ nhớ đệm . Khi bộ đệm đầy, đầu ra sẽ được hiển thị trên màn hình đầu ra tiêu chuẩn.

Bộ đệm trong xử lý tệp là gì?

Bộ đệm là vùng bộ nhớ dùng để lưu trữ dữ liệu tạm thời . Kích thước. Kích thước của mỗi phần tử được đọc theo byte. Đếm. Số phần tử được đọc. Dòng. Con trỏ tới đối tượng FILE từ nơi dữ liệu sẽ được đọc.

Kích thước bộ đệm trong Python là gì?

Kích thước của bộ đệm được chọn tùy thuộc vào “kích thước khối” của thiết bị bên dưới. Trên nhiều hệ thống, bộ đệm thường dài 4096 hoặc 8192 byte .

Chủ Đề