2016-11-14 55 views
0

我正在搜索如何創建指針數組並將其複製到CUDA內存。我發現這個職位CUDA Double pointer memory copy但下面的行接受的答案將雙指針的地址強制轉換爲void **

int ** devicePointersStoredInDeviceMemory; 
cudaMalloc((void**)&devicePointersStoredInDeviceMemory, sizeof(int*)*N); 

是竊聽我有點。 傳遞雙指針的地址是什麼意思,並將其轉換爲void**? 不會&devicePointerStoredInDeviceMemoryint***相同,所以爲什麼要將它投到void**而不是void***

它的工作原理,但我不明白爲什麼。

+1

注:這是標準C++未定義行爲,但Windows API依賴於它。 –

回答

1

傳遞雙指針地址並將其轉換爲void **的含義是什麼? devicepointerStoredInDeviceMemory不會與int ***相同,所以爲什麼要將它轉換爲void **而不是void ***?

cudaMalloc功能需要一個void **作爲第一個參數,所以如果我們要調用cudaMalloc,這就是我們需要的類型。第一個參數的目的是告訴codaMalloc指向我們分配的內存的指針的存儲位置。

你可以這樣做一樣好:

void *j; 
cudaMalloc(&j, sizeof(int*)*N); // stores result in j 
int **devicePointersStoredInDeviceMemory = (int **) j; 
+0

哦,我現在看到。所以'(void **)'可以被解釋爲「給我你想要我分配的變量的地址」?無論它是'int *'還是'float **'或'double *****'如果這是我的想法,我想我得到了它,謝謝 – BRabbit27

+2

我會將它理解爲「告訴我在哪裏存儲地址我爲你分配的記憶「。在這種情況下,我們希望該內存保存指向整數的指針,因此指向保存指向整數指針的內存的指針的類型爲「int **」。 –

相關問題