Yeni Malloc vs farklı dolgu
Yüksek performanslı bilgi işlem için MPI kullanan projemiz (10^5 - 10^6 çekirdek) için başkasının C kod Gözden geçiriyorum. Kodu farklı mimarileri (potansiyel olarak) farklı makineler arasında iletişim sağlamak için tasarlanmıştır. Çizgisinde bir şey diyor bir yorum yazdı
Normalde
new
delete
, kullanalım ama buradamalloc
free
kullanıyorum. Bu bazı Derleyicilernew
kullanılan verilerin farklı, farklı platformlar arasında veri aktarımı hataları için önde gelen pad için gereklidir. Bumalloc
ile olmaz.
Bu new
vs malloc
standart sorular biliyorum hiçbir şey uymuyor.
What is the difference between new/delete and malloc/free? derleyici bir nesne boyutu farklı (ama neden bunu kullanarak farklı sizeof
? sonra) hesaplamak olabileceği fikrini de ipuçları.
malloc & placement new vs. new oldukça popüler bir soru ama sadece new
hakkında konuşuyor malloc
Bu alakalı değil mi, değil nerede kurucular kullanıyor.
how does malloc understand alignment? bellek düzgün new
ya da daha önce düşünmemiştim ne malloc
ya ile uyumlu olmasını garanti olduğunu söylüyor.
Benim tahminim geçmişte kendi hata bazı zaman yanlış teşhis ve new
malloc
muhtemelen doğru olmadığını düşünüyorum doldurma farklı miktarlarda ver, sonucuna vardım. Fakat önceki söz konusu Google ile ya da cevap bulamıyorum.
Tek umudum sensin StackOverflow, bana yardım et!
CEVAP
IIRC tek seçici anlamı yok. malloc
bir adres herhangi bir standart türü için uyumlu geri dönüş için garanti edilir. ::operator new(n)
tek bir adres herhangi bir standart türü için uyumlu geri dönüş için garanti edilirn daha büyük yokT
new T[n]
tek adres T
hizalanmış dönmek için gereklidir sonra karakter bir tip değil ama.
Ama bu sadece ilgili zaman oynuyorsun uygulama özel numaralar gibi kullanarak alt birkaç bit bir işaretçi depolamak bayrakları, veya başka bir şekilde güvenerek adres için daha fazla uyum daha kesinlikle ihtiyacı var.
Mutlaka tam olarak aynı düzeni kapladığı bellek tahsis nasıl olursa olsun, olan nesne, içinde dolgu etkilemez. Aradaki farkı veri aktarımı hataları neden olabilir nasıl görmek için.
Ona göre onlar olup olmadığını yorum yazar veya yığın global nesneler hakkında ne düşündüğü herhangi bir işaret, "sıfır gibi malloc" veya ""? sıfır gibi yeni Bu fikir nereden geldiğini ipuçları verebilir.
Belki, ama belki de bahsediyor kodu malloc(sizeof(Foo) * n)
vs arasında doğrudan bir fark daha fazladır new Foo[n]
kafası karışık. Belki daha çok:
malloc((sizeof(int) sizeof(char)) * n);
vs
struct Foo { int a; char b; }
new Foo[n];
Bu, belki dedemek"Malloc kullanmak", amademektir"Ben el ile bir yapı kullanmak yerine, tarafsız konumlara veri paketi". Aslında malloc
elle yapı paketi için gerekli değildir, ama bunu anlamak için başarısız karışıklık, daha az bir ölçüde. Gerekli veri düzenini tel üzerinden gönderilen tanımlamak için. Farklı uygulamalar, veriler, farklı yazmayapıkullanılır.
Farklı Windows bağlanmak SQL Server Ma...
Ne durumda malloc vs yeni kullanabilir...
Git yeni ve farklı repo uzak bir sunuc...
Yeni/arasındaki fark/ücretsiz sil mall...
Ne zaman ve neden bir iÅŸletim sistemi ...