PHP kısa İnts (16-bit) kullanmak mümkün mü?

0 Cevap php

Arka plan: Ben her Apache istek için PHP belleğe yüklemek için gereken tamsayılar büyük bir 2D dizi var. Ben daha az bellek almak istiyorum.

Çoğu sistemlerde 32 bit PHP_INT_SIZE bayt, PHP depolar ints. Bütün tamsayılar bir short int (örneğin, C) olabilir, yani en az 16 ^ 2 'dir. Birazdan kısa İnts saklamak yarım RAM kadar alacağını düşünerek mıyım?

İdeal yapabilmek istiyorum:

$s = (short) 1234; // takes up 2 bytes instead of 4

Daha fazla bilgi:

  • Dizi RAM 100mb yaklaşık kaplıyor ve 30MB var_export() dökümü dahil tarafından oluşturulan
  • Dizi cron süreci yazılır. Sadece okuma bellek verimli (ve hızlı) olması gerekir
  • Ben tamsayılar yapmanız gereken sadece işlemleri (<,>, ===) hepsi karşılaştırarak ve sonra (Floyd-Warshall algoritmasına benzer) birkaç tanesi okuyor
  • DB her değer okunurken birkaç yüz milyon istek başına okur olarak orada yol çok yavaş

Bazı çılgın fikirleri:

  • Kullan pack() / unpack() ama çözdükten zaman hala 32 bit ints gibi değerleri saklamak istiyorsunuz
  • Bir görüntüdeki piksel gibi değerleri saklamak ve GD library (bu yavaş olurdu) onları okumak için PHP'nin kullanın
  • shmop_read() kullanın ve Apache süreçler dizi paylaşmak var
  • Memcached çalışır ama onunla hiçbir deneyime sahip ve bunu bir doğal PHP dizide birçok kez daha yavaş olacağını tahmin olabilir
  • C + + öğrenmek ve bir PHP uzantısı yazmak
  • Derleyişinizde PHP (veya HipHop?) Ints için 2 byte kullanarak
  • Igbinary kullanın (yararlı, ama paketi aynı sorun olacaktır ())

0 Cevap