Jest to podchwytliwe pytanie C zadane w wywiadzie: Napisz program, który nie robi nic, nawet nie zabiera pamięci.Czy można napisać program w C, który nic nie robi - nie zabiera nawet pamięci?
Czy można to zrobić?
Jest to podchwytliwe pytanie C zadane w wywiadzie: Napisz program, który nie robi nic, nawet nie zabiera pamięci.Czy można napisać program w C, który nic nie robi - nie zabiera nawet pamięci?
Czy można to zrobić?
Wszystkie programy korzystają z pamięci. Po uruchomieniu programu system ustawi przestrzeń adresową dla programu, skopiuje jego argumenty do przestrzeni procesowej, nadadzą mu identyfikator procesu i wątek, nadaj mu pewne deskryptory plików dla operacji we/wy itp. Nawet jeśli program natychmiast kończy działanie, nadal zużywasz tę pamięć i czas procesora.
+1 Dziękuję .. –
Nie jest to niemożliwe. Kod i stos muszą iść gdzieś i to prawie zawsze pozostanie w pamięci.
Zignorowanie tego na pewno jest dość łatwe do napisania aplikacji, która natychmiast wychodzi.
"prawie zawsze"? Gdzie indziej będzie kod i stos, ale w pamięci? –
@Martin: Niektóre maszyny mają "pamięć kodów" i "pamięć stosu". Przypuszczam, że jest to wciąż pamięć ... ale nie jest pamięcią w rozumieniu malloc, ponieważ pochodzi z zupełnie innej puli. – Goz
Twoja odpowiedź powinna być zgodna z pytaniem, "dlaczego" chcesz coś takiego zrobić. to wskazywałoby na swobodę myślenia poza tym pytaniem.
A jeśli jego wykładowcy są kimś podobnym do mnie ... zawiedzie go za bycie mądrym osłem. Tak się cieszę, że opuściłem uniwersytet (bardzo się cieszę, że opuściłem stronę naukową ... zabawa i spanie przez cały dzień była raczej przyjemna;)). – Goz
Napiję się tego ... zzzz !! :-) –
Właściwie to myślę, że pytanie, dlaczego chcesz to zrobić, nie jest w tym przypadku doskonałym pytaniem. Jest to sztuczne lub hipotetyczne pytanie badające niektóre ważne pojęcia - sam program zerowy nie musi być wartościowy, jeśli myśl, próbując go wyprodukować, czegoś uczy. Czasami podróż jest jego własną nagrodą. – djna
Na powierzchni pytanie wydaje się mieć prostą odpowiedź: "Nie, nie można tego zrobić". @templatetypedef podał kilka powodów.
Być może jednak chodzi o to, aby się przekonać, jak się do tego odnosi. Możesz otrzymać "znaki" za pytanie "jakiego rodzaju pamięć" lub za obserwowanie niektórych punktów, które zrobił @templatetypedef. Lub pokazując pustą metodę main() podaną przez @Mihran Hovsepyan, a następnie wyjaśniając, że niektóre pamięci będą włączone nawet w tym minimalnym przypadku.
Pusty program to program, prawda?
Poniżej jest mój program nie wykorzystanie zasobów :)
Należy również pamiętać, że. Ściśle mówiąc, program naprawdę nie zużywa żadnego zasobu, dopóki system operacyjny nie załaduje go i nie uruchomi. Kiedy to się stanie, nazywamy to procesem.
Chociaż przy uruchamianiu programu będzie trochę pamięci przydzielonej przez system operacyjny, większość ludzi nie wie, że main() nie jest rzeczywistym punktem wejścia programu. mainCRTStartup jest, przynajmniej w aplikacji konsoli Windows. Jeśli utworzysz program z rzeczywistym punktem wejścia, unikniesz procedur inicjalizacji sterty, parsowania argumentów poleceń, inicjalizacji zmiennych globalnych i tak dalej.
W pewnym sensie można zrobić program, który unika zarządzania stosem i tym podobnych rzeczy. Ale system operacyjny nadal będzie go czytał w pamięci.
Poprawną odpowiedzią jest to, że realizacja specyficznych. Wdrożenie może obsługiwać puste programy, a mechanizm execve
(lub równoważny) mógłby wykonać odpowiednik _Exit(0)
, gdy napotkałby jeden, ale w praktyce tak nie jest.
Dalsi opieka wyjaśnić? –
Określ dokładnie, co masz na myśli, biorąc pamięć? Czy oznacza to, że program nie może przydzielić żadnej pamięci do stosu wywołań i/lub sterty lub użyć jakiejkolwiek pamięci po uruchomieniu? – Argote
@mr_eclair: dołącz tag rozmowy, jeśli jest to pytanie do wywiadu. –
unikaj tego pracodawcy. Nie mają pojęcia, o co pytają. –