Regne ut størrelse på shmoppen

kongen

kongemedlem
Hvordan kan jeg regne ut $size som skal brukes på shmoppen for å unngå at den bruker for mye av minne?

Hvis dataen som skal lagres bare tar 100 bytes så er det dumt å holde av 2 megabyte av minne.

PHP:
$text = "bolle er godt";
$size = ?????

$shmid = shmop_open(1, 'c', 0755, $size);
shmop_write($shmid, $text, 0);
 

adeneo

Medlem
Trenger du virkelig delt minne? Dette er noe mer vanlig i C++ og den slags, samt med programmer i forskjellige språk som trenger tilgang til de samme dataene, og ofte har man pointers og den slags.

Jeg har aldri brukt dette i PHP, og vet ærlig ikke talt ikke hvordan det virker, men for å finne størrelsen på en string i bytes kan du bruke et format som ikke er multibyte.

Vanligvis så er det slik at ett tegn tar opp en byte med plass, men enkelte formater er multibyte for å få plass til alle tegnene de støtter i en rekke på 8 bits.

UTF8 er multibyte, som betyr at enkelte tegn kan oppta flere bytes, slik som for eksempel æøå som opptar 2 bytes, eller € (euro) som tar opp 3 bytes i UTF8, men jeg mener vanlig 8 bit ikke er multibyte, slik at dersom stringen er i det formatet så kan man kun sjekke strlen, og ettersom mb_strlen også konverterer kan du vel gjøre

PHP:
$text = "bolle er godt";
$size = mb_strlen($text, '8bit');

for å få antall bytes
 
Sist redigert:

kongen

kongemedlem
Takk :)

Jeg leste en plass at det var mye raskere enn memcache, 30-60 ganger raskere ved tester. Jeg skal bruke det som "in memory" cache med fallback til fil cache med fallback til søk i db som siste utvei.

Noe slikt tror jeg.
 

kongen

kongemedlem
Trenger du virkelig delt minne? Dette er noe mer vanlig i C++ og den slags, samt med programmer i forskjellige språk som trenger tilgang til de samme dataene, og ofte har man pointers og den slags.

Vil delt minne si at det jeg putter i minnet kan hentes og leses av alle som har webhotell på samme server?
 
Topp