How to modify a TypedArray in a structure without modifying the underlying pointer in a mex file?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I have a mex file which receives a structure which has several fields as input and returns the same structure. One of the fields is a 2D double array.
I can read the data on the specific field, cast is to a TypedArrayRef<double> and modify it. But everytime I look at the structure address behind data (using format debug) in successive executions of the MEX file, the pointer to the array changes. Why is this?
I am following this example: https://de.mathworks.com/help/matlab/matlab_external/avoid-copies-of-large-arrays.html
Does this mean the data is being copied? I want to avoid copying the data.
Respuestas (1)
Karan Singh
el 30 de En. de 2024
Hi Simon,
The MATLAB Data API, which you're using in the provided C++ MEX example, is designed to be safe and to prevent accidental misuse of memory. When you pass data from MATLAB to a MEX function, MATLAB uses a copy-on-write strategy. This means that the data is not physically copied until you try to modify it. When you access the data in a read-only fashion, you are looking at the original data. However, once you modify the data, MATLAB will create a copy of the data to preserve the original data's integrity.
In the example you've provided, you're modifying the elements of the array with this loop:
for (auto& elem : largeArray) {
if (elem < 0) {
elem = 0;
}
}
Hope this clarifies the doubt!
0 comentarios
Ver también
Categorías
Más información sobre Write C Functions Callable from MATLAB (MEX Files) en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!