์ด ๊ธฐ๋ฅ :
PyObject_GetBuffer
PyBuffer_Release
PyBuffer_Release
๋ PyBufferProcs.bf_releasebuffer(PyObject *exporter, Py_buffer *view)
PyBuffer_Release
ํธ์ถํฉ๋๋ค. ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด _ " view
์ (๊ณผ) ๊ด๋ จ๋ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ "_ ํ ์ ์์ผ๋ฉฐ view
๊ฐ exporter
.
๋ฐ๋ผ์ ์์น์ ์ผ๋ก bf_getbuffer
์์ ์ฆ์ ๋ฒํผ๋ฅผ ํ ๋นํ๊ณ ๋ง์ง๋ง ์ฌ์ฉ์ด ๋ฆด๋ฆฌ์ค ๋ ๋์ด๋ฅผ ์ญ์ ํ๋ ์ ํ์ numpy์์ ์ฌ์ฉ ํ ์์ ๋ฅผ ์ ๋ฐํฉ๋๋ค.
๋ฒํผ ํ๋กํ ์ฝ์ ๊ตฌํ์๊ฐ ์ค์ ๋ก์ด ์์ ์ ์ํํ๋์ง ์ฌ๋ถ๋ ์ ์ ์์ง๋ง ๋ด๊ฐ ์ฝ๋ ๊ฒ์ ํ์ฉ๋๋ค๋ ๊ฒ์ ๋๋ค.
์ด๊ฑด ์ด์ํด. ๋ฒํผ ์ธํฐํ์ด์ค๊ฐ ๋ฒํผ ๊ตฌ์กฐ์ฒด ํ๋ (์ : ์คํธ๋ผ์ด๋ ๋ฑ)๊ฐ PyBuffer_Release
์ ์ํด ํด์ ๋๋ ๋์ ๊ฐ๋ฆฌํค๋ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ ์๋ ๊ฐ์ฒด๊ฐ ์์ ํด์ผํ๋ค๊ณ ์ง์ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๋งค์ฐ ์ฑ๊ฐ์ _dealloc_cached_buffer_info
)๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ญ์์ค. ์ด๊ฒ ์๋์ด๊ณ ์ฌ์ค์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ ...
์ด์ ์ด ํจ์๋ ๋ฒํผ๊ฐ ์๋ PyArray_Chunk
๋ฐํํ๋ฏ๋ก ์์์ ๋งํ๋๋ก ์ค๋ช
ํ๋ฉด ์ค์ ๋ก๋ ์์ ํ ๊ด์ฐฎ์ต๋๋ค.
๊ทํ์ ํด์์ ๋ ํฉ๋ฆฌ์ ์ผ๋ก ๋ค๋ฆฝ๋๋ค-์๋ง๋ python / cpython์ ๋ํ ํ ์์ฒญ์ ๋ด๊ฐ ์์์ ์ค๋ช ํ ๊ฒ์ ๊ตฌํํ์ง ์๋๋ก ์ฌ๋๋ค์๊ฒ ๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ด ํ๋ช ํ ๊ฒ์ ๋๋ค.
์ด๋ฆฌ๋ ค๊ณ ํ์ง๋ง ๋จผ์ ์ ์ฌ์ ๋จน์์ต๋๋ค. https://bugs.python.org/issue39471 ์ค์ ๋ก ํ ์คํธ ๋ณ๊ฒฝ์ ์ ์ํ๋ ๊ฒ์ ๊ฒํ ํ ์ ์์ต๋๋ค. ๋ด ํด์์ ๋์ ํ ์ ์๋ค๋ฉด ๋ฒํผ ํ๋กํ ์ฝ ๊ตฌํ์์ ๋งค์ฐ ์ถํ๊ณ ๋งค์ฐ ๋๋ฆฐ ์ฝ๋๋ฅผ ์ ๋ฆฌํ ์ ์์ต๋๋ค (ํ์ฌ ์ค์นผ๋ผ ์ํ ์๋๊ฐ 20 % ์ด์ ๋๋ ค์ง). (ํธ์ง :ํ์ง๋ง ํ์ด์ฌ์ด ArgParse ์ฝ๋๋ฅผ ์์ ํ ํ์ ๋ง โโ๊ฐ์ ํฉ๋๋ค. :()
๊ทธ๊ฒ์ ์ฝ๊ฐ์ ๋ช
ํ์ฑ์ ์ถ๊ฐํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค-๋๋ ํ์ด์ฌ์ด ์ ์ ๊ฐ์ bf_releasebuffer
์ ๊ฐ์ ์ฝ๊ธฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ๊นจ๋ซ์ง ๋ชปํ์ต๋๋ค.
์ ์ฅ, ๋๋ (PEP์์) ์ ์ ๊ทธ๊ฒ์ ๋ฎ์ด ์ผ๋ค.
๋ด๋ณด๋ด๊ธฐ๋ struct bufferinfo๋ฅผ ํตํด ๊ณต์ ํ ์์๋ ๋ฉ๋ชจ๋ฆฌ, ์คํธ๋ผ์ด๋, ๋ชจ์, ํ์ ์คํ์ ๋๋ ํ์ ๋ณ์๋ฅผ ๋ค์ ํ ๋น ํ ์์๋ ๊ฒฝ์ฐ bf_releasebuffer ํจ์๋ฅผ ์ ์ํด์ผํฉ๋๋ค.
๋ฒํผ์ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ์ฒญํฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์ ํจํ ๊ฒ์ฒ๋ผ ์ฝ์ต๋๋ค.
ํ์ง๋ง : array
(python one)์ ๊ตฌํ์ ์ดํด๋ณด๋ฉด, ๋ฒํผ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ํฌ๊ธฐ ์กฐ์ ์ ๋นํ์ฑํ ํ๋ ๋ฐ