2016-03-22 11 views
1

mxGetPr veya mxRealloc tarafından döndürülen bir işaretçi verildiğinde, hala uzunluğunu alabilir miyiz? MATLAB, işaretçilerin belleğini yönetdiğinden, sorgulamak için meta verilerini saklıyor mu?mxRealloc veya mxMalloc tarafından döndürülen işaretçinin uzunluğunu biliyor muyuz?

+0

['mxGetNumberOfElements'] (http://www.mathworks.com/help/matlab/apiref/mxgetnumberofelements.html) veya [' mxGetDimensions'] (http://www.mathworks.com/help) kullanabilir misiniz? /matlab/apiref/mxgetnumberofelements.html)? – Suever

+0

İşaretçinin uzunluğu her tür için gibidir: 'sizeof (pointer_name)'. Yoksa işaret ettiği nesneyi mi kastediyorsunuz? – Olaf

+0

Sanırım o, ayrılan baytların sayısı anlamına geliyor. – FredK

cevap

0

Sorunuz biraz belirsizdir, bu yüzden bana iki işlevi açıklamaya çalışalım: için

  • mxGetPr tam olarak kendi veri (işaretçiyi almak için varolan mxArray sayısal dizi denir, işaretçi double gerçek veri). Bu verilerin uzunluğunu bilmek istiyorsanız, orijinal diziyi mxGetNumberOfElements kullanarak sorgulayabilirsiniz.

  • mxRealloc ve ilgili işlevler, C içinde kullanılabilen standart malloc ailesi işlevine benzer. Yani bunları kullanıyorsanız, belleği ayırdığınızdan beri hangi boyutta olduklarını biliyorsunuz!

mxRealloc ve ilgili fonksiyonların amacı bir ölçüde otomatik yönetmek belleğe MATLAB izin vermektir; Böylece bir MEX işlevi döndüğünde, MATLAB, mxMalloc ile ayrılmış olan herhangi bir kayıtlı bellek belleğini serbest bırakmaya özen gösterir.

Şimdi iyi bir kod yazmak, kendi belleğinizi boşaltmanız gerektiği anlamına gelir (bu otomatik bellek yönetimine güvenirseniz işleri yavaşlatabilir), ancak bazı durumlarda kullanışlı olur (bir MEX işlevinin içinde bir hata atmayı düşünün) kaynakların çıkışta serbest kalmasını sağlamak için çirkin goto ifadelerine güvenmek zorundadır).

+0

Eğer internals ile ilgileniyorsanız, sanırım bellek ayırıcılarının çoğu, dizinin kendisinden hemen önce yığın-ayrılmış bir dizinin uzunluğunu depolar (ptr [-1] 'konumundaki bir başlık gibi). Ayrıca, bazı uygulamaların hata ayıklama sürümü, arabellek taşması yakalamalarını denetlemek için ek kontrol için üstbilgi/altbilgi alanında fazladan öğeler depolayabilir. – Amro

İlgili konular