教你獲取new出的陣列大小

2021-10-05 20:34:20 字數 353 閱讀 1549

之前在網上沒怎麼看到獲取陣列大小的文章,現在給大家說一下自己的方法。

首先,c++new出的陣列或者物件c++都是知道其記憶體大小的,既占用位元組,而這個占用位元組在哪兒呢,沒錯,就在變數位址 - 4個int占用位元組的大小 = 存放new物件的占用位元組(僅在64位環境下測試,32位也可以試試)。那麼知道這個就簡單了。

我們可以先獲取到存放其占用位元組的記憶體位址,記憶體位址 = (int*(物件指標)) - 4, 那麼我們這樣就拿到了存放位元組大小的記憶體位址,如果要獲取陣列個數就更簡單了,直接用位元組大小 / 物件型別占用位元組 = 陣列個數。例:陣列個數 = (*((int*(物件指標)) - 4)) / sizeof(物件型別), 這樣我們就拿到了陣列個數,是不是很簡單

new 的不是自己想要的大小

事件起因為我開了很多執行緒,然後 對乙個httpserver傳送一些string的命令,最多大概傳送個千把次,但是伺服器有時候接受的string 會莫名奇妙的多一些字串在末尾。csafearrayvector vartmpdata csafearrayvector vardata variant轉v...

Android獲取控制項的大小

有時候我們需要獲得控制項的大小,但是在activity的oncreate 生命週期方法中呼叫getwidth 和getheight 方法並不能獲得控制項的寬和高,因為此時我們的介面並未被繪製完成。不過我們卻可以在onwindowfocuschanged boolean hasfocus 這個方法中獲...

使用陣列實現固定大小的棧入棧和出棧的操作

author karl date 2019 5 27 description 使用陣列實現入棧和出棧的操作 public class arraystack 入棧的動作 return public boolean push string data 賦值 sts count data 下標加 1 cou...