如果我有* p = malloc(1000),我想將內存p劃分爲200和300的塊,並獲取塊的地址並使用它。有沒有簡單的方法來做到這一點?如何將malloc內存劃分爲c
回答
有沒有你不這樣做的理由......
char* firstblock = malloc(200); char* secondblock = malloc(300); char* thirdblock = malloc(500);
如果你想帶你雖然方法,你可以做
char* wholething = malloc(1000); char* firstblock = wholething; char* secondblock = wholething + 200; char* thirdblock = wholething + (200 + 300);
但對我來說沒有多大意義。
我推薦使用獨立塊的第一個原因是因爲當你完成它時你可以釋放一個塊。如果你無論如何都在同一時間釋放所有這些,那麼這是真的,它可以稍微提高性能,但是這種好處可以忽略不計。第二個原因是你的系統可能比一個小塊更快樂,因爲一個大塊不適合頁面。儘管可以說相反,因爲需要追蹤更少的街區。但是,再一次,在大多數情況下,性能優勢或影響非常小,以至於您採用哪種方法確實無關緊要。所以第三個原因,可讀性,就是爲什麼我說要使用單個塊。
請記住,偏移量可能需要或可能不需要乘以大小。
在這種情況下,是的......
char* wholething = malloc(1000 * sizeof(int)); int* firstblock = wholething; int* secondblock = wholething + 200; int* thirdblock = wholething + (200 + 300);
但是在這種情況下,不...
int* wholething = malloc(1000 * sizeof(int)); int* firstblock = wholething; int* secondblock = wholething + 200; int* thirdblock = wholething + (200 + 300);
malloc
是肯定給你一個連續的塊。您可以像通過數組一樣遍歷塊。分成塊只是索引到正確的位置。
char *p;
p = malloc(sizeof(char)*10+sizeof(int)*20);
char *x = p;
int *y = p+10;
現在x[0]
到x[9]
可用於char
S和y[0]
到y[19]
可用於int
小號
這是一個非常愚蠢的辦法。更好的方法是簡單地使用單獨的塊。
任何使用'sizeof(char)'的人都不理解他寫的東西。你怎麼問:「有多少隻大象是一隻大象?」 – Deduplicator
爲了便於閱讀,我使用'sizeof(char)'。我**知道'sizeof(char)'肯定是1個字節(儘管不一定是8位)。當我使用'sizeof(char)'時,我發現我的代碼更具可讀性。這對我的時間並不是很大的浪費 – avmohan
我覺得另一種有助於理解的方法是char * x; int * y; char * p = malloc(sizeof(* x)* 10 + sizeof(* y)* 20); x = p; y =(int *)(p + 10);'。使用'sizeof(* pointer_variable)'。 – chux
- 1. malloc內存分配
- 2. 如何分配內存使用C++而不是C malloc
- 3. C中的malloc內存分配方案
- 4. malloc分配內存和SIGSEGV
- 5. 使用malloc()分配內存
- 6. C++ malloc():內存損壞
- 7. 使用malloc爲字符串分配內存(C++源)
- 8. 新的和malloc(C++)未能分配內存。如何修復/重新分配?
- 9. C /用Cython:一個malloc的內存分配的初始內容
- 10. 使用malloc分配動態內存
- 11. 使用的sizeof()的malloc分配內存
- 12. Malloc分配相同的內存塊
- 13. 使用malloc分配內存失敗
- 14. Malloc分配內存超過RAM
- 15. 使用malloc動態分配內存()
- 16. Malloc - >分配了多少內存?
- 17. 的malloc分配內存的列表
- 18. 無法使用MALLOC分配內存
- 19. 內存分配閾值(mmap vs malloc)
- 20. malloc真正分配多少內存?
- 21. malloc觸摸未分配的內存
- 22. Ç - 的malloc分配太多內存
- 23. 將較大的malloc塊劃分成較小的「分區」
- 24. C - Malloc和memcpy(內存管理)
- 25. malloc問題,C中的內存泄漏
- 26. 將列表劃分爲C#塊
- 27. 將數據劃分爲datagridview C#
- 28. 將容器劃分爲大塊,C++
- 29. 我如何malloc 8 * 10^9 int內存?
- 30. 如何限制的malloc的內存
是;只需添加200個字節到你的指針。這是你的記憶;你可以隨心所欲地做任何事情。 – SLaks
只有當你總是希望再次釋放它們時纔有意義,在這種情況下,這是一種有效的優化。如果你想建立你自己的分配器,你通常會去內存塊的低級平臺方法... – Deduplicator
這可能是一個非常糟糕的主意。你至少應該考慮到任何對齊問題。 –