Szukam ostatecznej odpowiedzi (jeśli takowa istnieje) na ile pamięci powinno być przydzielone podczas tworzenia statycznych fragmentów pamięci współdzielonej przez boost::interprocess
's managed_shared_memory
. Nawet official examples wydaje się przydzielać arbitrarily large porcji pamięci.Ile pamięci powinna przydzielić "managed_shared_memory"? (boost)
Rozważmy następującą strukturę:
// Example: simple struct with two 4-byte fields
struct Point2D {
int x, y;
};
My pierwsza reakcja jest odpowiedniej wielkości będą 8 bajtów, lub sizeof(Point2D)
. To niestety kończy się niepowodzeniem, gdy próbuję skonstruować obiekt, dając mi błędy seg-fault w czasie wykonywania.
// BAD: 8 bytes is nowhere near enough memory allocated.
managed_shared_memory segment(create_only, "My shared memory", sizeof(Point2D));
Jaka operacja odczytu/zapisu powoduje błędy segmentu? Operacje na stosie? Tymczasowe alokacje w ramach segment.construct()
? Ile dodatkowego jest konieczne przy przydzielaniu pamięci współużytkowanej?
Dzięki próbom i błędom odkryłem, że pomnożenie rozmiaru przez 4 może działać dla powyższej struktury, ale rozpada się, gdy zaczynam dodawać kolejne pola do mojego struct
. Tak, to cuchnie złym hackem.
Niektórzy mogą twierdzić, że "pamięć jest tania" w nowoczesnym komputerze, ale nie zgadzam się z tą filozofią i nie lubię przydzielać więcej niż potrzebuję, jeśli mogę tego uniknąć. Wczoraj pobrałem dokumentację Boost i nie mogłem znaleźć żadnych rekomendacji. Oto nauka dzisiaj czegoś nowego!
Ludzie mogą się ze mną nie zgodzić, ale nigdy w życiu nie zakodowałem na zasadzie "pamięć jest tania". Kupowanie pamięci niekoniecznie jest drogie w porównaniu do tego, jak było kiedyś, ale jest bardzo podobne do pieniędzy. Im więcej masz, tym więcej wydajesz. Każda aktualizacja pamięci, którą kupiłem dla mojego komputera, osiągnąłem maksimum dość szybko, teraz mogę "uruchomić więcej rzeczy". Zawsze starałem się kodować konserwatywnie pod tym względem, ponieważ niekoniecznie jest to tanie * dla mojej aplikacji *. W każdym razie, właśnie mój 2c na tym :) –
Zgadzam się 100%! I to jest ** cały ** powód, dla którego zadaję to pytanie. Rzuciłem tylko tamten komentarz, aby odwieść kogoś, kto mówi: "kogo to obchodzi, po prostu przydziel 1k i skończ z tym." Postaram się wyjaśnić to lepiej w poście. –
Ah ok :) "Niektórzy mogą argumentować" jest znacznie lepszy! –