traduccion ps4 lenguaje language descargar rust

ps4 - rust traduccion



¿Por qué los programas Rust usan mucha más memoria que las versiones C, Haskell y OCaml? (2)

Porque la biblioteca estándar está vinculada estáticamente.

Puede superar esto compilando con la opción -C prefer-dynamic .

En cuanto al motivo detrás de la vinculación estática de la biblioteca estándar: aumenta la portabilidad del ejecutable (es decir, no es necesario instalar la biblioteca estándar en el sistema de destino).

Miré la cantidad de RAM utilizada por los programas de Rust (columna RES del comando top ) y me pregunto por qué usan tanta memoria.

Aquí hay un ejemplo:

use std::io; fn main() { println!("What''s your name?"); let mut input = String::new(); io::stdin().read_line(&mut input).unwrap(); println!("Hello {}!", input); }

Vi que se usaron 6 MB de memoria antes de ingresar algo.

Aquí es cómo compilé y ejecuté el programa:

cargo build --release ./target/release/main

El programa C equivalente:

#include <stdio.h> int main(void) { printf("What''s your name?/n"); char input[100] = {0}; scanf("%s", input); printf("Hello %s!/n", input); return 0; }

solo usa 0.6 MB. En este caso, el programa Rust usa 10 veces más memoria. En otros casos, vi que el programa Rust usa 5 veces más memoria.

También probé con otros idiomas para comparar.

La versión OCaml:

let () = print_endline "What''s your name?"; let line = read_line () in print_string "Hello "; print_endline line

usa 1 MB.

La versión Haskell:

main = do putStrLn "What''s your name?" name <- getLine putStrLn ("Hello " ++ name ++ "!")

usa 3 MB.

La versión de Python:

print("What''s your name?") name = input() print("Hello", name, "!")

usa 7 MB, casi lo mismo que la versión Rust!

Actualizar

Estoy ejecutando Linux (ArchLinux) con Rust 1.3 (también probé la noche con resultados similares).

Actualización 2

Aquí hay más datos del comando htop :

VIRT RES SHR MEM% Command 15572 2936 804 0.1 ocaml 21728 2732 2528 0.1 haskell 22540 7480 4308 0.2 python 4056 668 600 0.0 c 24180 6164 1928 0.2 rust

Actualización 3

Hice más pruebas con massif para ver el uso de la memoria.

Para cada programa, ejecuté massif dos veces, de la siguiente manera:

valgrind --tool=massif --time-unit=B ./program valgrind --tool=massif --pages-as-heap=yes --time-unit=B ./program

Aquí están los resultados con todos los programas (como se muestra en ms_print ):

Versiones C:

https://framabin.org/?dd243f8ec99155bc#Af5cPrcHnz3DsWiOStfwgW8Qq6BTVhogz/46L+sMuSs=

https://framabin.org/?261b9366c3749469#1ztDBkgVly9CanrrWWrJdh3yBFL5PEIW3OI5OLnze/Q=

Versiones de óxido:

https://framabin.org/?0f1bac1c750e97bf#AXwlFYYPHeazq9LfsTOpRBaUTTkb1NfN9ExPorDJud0=

https://framabin.org/?c24b21b01af36782#OLFWdwLjVG2t7eoLqLFhe0Pp8Q8pA2S/oq4jdRRWPzI=

Versiones OCaml:

https://framabin.org/?060f05bea318109c#/OJQ8reHCU3CzzJ5NCOCLOYJQFnA1VgxqAIVjgQWX9I=

https://framabin.org/?8ff1ffb6d03cb37a#GN8bq3Wrm6tNWaINIhMAr4ieltLtOPjuZ4Ynof9bV4w=

Versiones Haskell:

https://framabin.org/?b204bd978b8c1fd8#DyQH862AM8NEPTKlzEcZgoapPaZLdlF9W3dRn47K5yU=

https://framabin.org/?ac1aa89fcaeb782c#TQ+uAiqerjHuuEEIhehVitjm63nc3wu5wfivAeBH5uI=

Versiones de Python:

https://framabin.org/?197e8b90df5373ec#aOi0+tEj32Na5jW66Kl97q2lsjSZ2x7Cwl/pOt0lYIM=

https://framabin.org/?397efa22484e3992#1ylOrmjKaA9Hg7gw7H7rKGM0MyxuvKwPNN1J/jLEMrk=

Resumen (uso de ram):

|------------|----------|----------|----------|----------|----------| | | C | Haskell | OCaml | Rust | Python | |------------|----------|----------|----------|----------|----------| | First run | 1 B | 63.12 KB | 5.993 MB | 816 B | 1.321 MB | |------------|----------|----------|----------|----------|----------| | Second run | 6.031 MB | 24.20 MB | 17.14 MB | 25.60 MB | 27.43 MB | |------------|----------|----------|----------|----------|----------|

La primera ejecución es sin el --pages-as-heap=yes .

También ejecuté massif con la opción --stacks=yes para C y Rust.

Versión C:

https://framabin.org/?b3009d198ccfdee1#HxR6LPPAzt15K+wIFdaqlfSJjBrJvhV2ZHWdElg3ezc=

(3.141 KB)

Versión de óxido:

https://framabin.org/?b446d8d76c279007#tHnGiOnRstTA2krhz6cgfvTjI+FclcZS3rqyZvquWdQ=

(8.602 KB)

¿Qué explica una diferencia tan grande entre la asignación de bloques de bloques y la asignación de páginas en Rust?


Este artículo tiene una muy buena discusión del tema. Algunos de los culpables más grandes y más comunes son los valores predeterminados de la carga para depurar compilaciones (no son relevantes en su caso) y están incluidas de forma estática de manera predeterminada.