Flamboyan


Kapan Erlang iolist sebuah iovec?

Dalam percobaan pemikiran kami di sini, kami ingin menghindari pengalokasian biner umum ini, dan kami ingin memastikan bahwa vize diminimalkan dan kami dapat secara efisien mengemas iovec tanpa alokasi dan penyalinan. Ini disebut oleh erts_port_output, dan sebuah biner umum dialokasikan berdasarkan ukuran csize. Biasanya, jika vansze yang tidak dibungkus cukup kecil, kita tidak akan berkemas, karena itu berarti lebih sedikit pekerjaan. Perhatikan bahwa kita mengetahui ukuran yang dikemas dan tidak dibungkus. Jika kita belum berada di bagian yang akan mengarah ke biner umum, kita harus menambahkan ukuran iIMec yang mendasarinya. Jika itu adalah byte, kita tambahkan ukuran biner biasa yang dibutuhkan. Perhatikan tingkah lakunya yang sama untuk dikemas dan dibongkar. Kita mulai dengan mendapatkan sekumpulan properti tentang biner, dan erroring jika ini adalah bitstring. Dalam Erlang, bitstring adalah biner dengan sejumlah bit yang bukan merupakan kelipatan dari 8. Perhatikan bahwa kita tidak error jika biner ini memiliki bit offset non-oktet. Jadi jika biner kurang dari 256 byte , dan kita perlu berkemas, kita akan menyalinnya ke dalam biner umum daripada merujuknya secara langsung. Kode ini berlaku hanya untuk jumlah yang kami isi. ERL_SMALL_IO_BIN_LIMIT adalah 4 * ERL_ONHEAP_BIN_LIMIT, yaitu 4 × 64 = 256. Saat kita melihat sisa kode, kita akan melihat bagaimana argumen lain digunakan. Komentar di sini cukup jelas; obj adalah input dan iov adalah outputnya. Apakah untuk berkemas atau tidak dinyatakan oleh bin_limit.Jika kita perlu memancarkan referensi ke bagian dari biner umum, lakukan itu terlebih dahulu. Jika tidak, kami membuat terjemahan langsung ke entri iovec. (source)