SORU
8 Kasım 2012, PERŞEMBE


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 burada malloc free kullanıyorum. Bu bazı Derleyiciler new kullanılan verilerin farklı, farklı platformlar arasında veri aktarımı hataları için önde gelen pad için gereklidir. Bu malloc 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
8 Kasım 2012, PERŞEMBE


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrea Lewis

    Andrea Lewis

    14 Mart 2013
  • Google Chrome

    Google Chrom

    1 EYLÜL 2008
  • Semantic Mastery

    Semantic Mas

    30 EKİM 2013