Hi,
I created a minimal cython interface to c++ and I am unsure of whether or not
memory is copied and how it is eventually freed. My files are:
--- xbk.hpp ---
#pragma once
#include <arrow/api.h>
namespace xbk {
std::shared_ptr<arrow::Array> makeArray();
}
--- xbk.cpp ---
#include <vector>
#include "xbk.hpp"
namespace xbk {
std::shared_ptr<arrow::Array> makeArray()
{
std::vector<std::string> v = {"A", "B", "C"};
arrow::StringBuilder builder;
builder.AppendValues(v);
std::shared_ptr<arrow::Array> array;
builder.Finish(&array);
return array;
}
}
--- xbk.pxd ---
from pyarrow.lib cimport *
cdef extern from "xbk.cpp":
pass
cdef extern from "xbk.hpp" namespace "xbk":
cdef shared_ptr[CArray] makeArray()
--- xbk_arrow.pyx ---
# distutils: language = c++
from xbk cimport makeArray
from pyarrow.lib cimport *
def makeArrayWrapper():
a = makeArray()
return pyarrow_wrap_array(a)
--- caller.py ---
from xbk_arrow import makeArrayWrapper
a = makeArrayWrapper()
f"{a[0]} {a[1]} {a[2]}"
My questions are: when calling makeArrayWrapper from caller.py is the Array
created within the makeArray function copied when it is converted into a python
object? Also, is the memory freed by the python gc and/or the c++ lib in a
timely way? If there is copying or leaking in the above setup, what is the
correct way to pass arrow objects created in c++ libraries back to python
without copying or leaking? I read over
https://arrow.apache.org/docs/python/extending.html but I am still unsure.
Thanks for any help,
Matt
The information contained in this e-mail may be confidential and is intended
solely for the use of the named addressee.
Access, copying or re-use of the e-mail or any information contained therein by
any other person is not authorized.
If you are not the intended recipient please notify us immediately by returning
the e-mail to the originator.
Disclaimer Version MB.US.1