Nous n'avons que 45 min 😅
@_Akanoa_
https://lafor.ge
0️⃣ 1️⃣ 0️⃣
1️⃣ 0️⃣ 1️⃣
1️⃣ 0️⃣ 0️⃣
Architecture Von Neumann (très) simplifiée
Partitionnement de la mémoire
Segmentation de la mémoire
Différents usages de la mémoire
Mécanisme de libération de la mémoire
Pointeurs
#include <stdio.h>
#include <stdlib.h>
void greedy(int i) {
// On demande de la mémoire
int *p = malloc(sizeof(int));
if (p != NULL) {
*p = i;
}
// Mais on ne la libère pas
}
int main() {
for (int i = 0; i < 1000000000; i++) {
greedy(i);
}
return 0;
}
void ungreedy(int i) {
// On demande de la mémoire
int *p = malloc(sizeof(int));
if (p != NULL) {
*p = i;
}
// libération de la mémoire détenu par par p
free(p);
}
Free Explicite 🖐️✏️ | Garbage Collector 🤖 |
---|---|
❌ Double Free ‼️ | ✅ Automatique - pas d'oublie de free - pas de early free - pas de double free |
❌ Leak (oublie) 🤭 📈 | ❌ Freezes réguliers ❄️ |
❌ Early ( Segfault ) 🐇 💥 | ❌ Tuning compliqué 🧙🏼♀️ |
❌ Complexe 🤯 | 😐 Side-car |
✅ Très performant ⚡ | |
À la compilation ⚙️ | Pendant l'exécution 🏃 |
struct Toto {
data : String
}
impl Toto {
fn new() -> Self {
Toto { data : String::new() }
}
}
impl Drop for Toto {
fn drop(&mut self) {
println!("Toto doit mourir")
}
}
Hello world!
Toto doit mourir
fn main() {
let toto = Toto::new();
println!("Hello world!");
}
fn main() {
let toto = Toto::new();
eat(toto);
println!("Fin du programme");
}
fn eat(toto: Toto) {
println!("Dans la fonction eat");
}
Dans la fonction eat
Toto doit mourir
Fin du programme
fn main() {
let toto = Toto::new();
let toto2 =
give_back(toto);
println!("Hello world!");
}
fn give_back(toto: Toto)
-> Toto
{
println!("Give back!");
toto
}
Give back!
Hello world!
Toto doit mourir
fn main() {
let toto = Toto::new();
lend(&toto);
println!("Hello world!");
}
fn lend(toto: &Toto) {
println!("Lend!")
}
Lend!
Hello World!
Toto est détruit
fn main() {
let toto = Toto::new();
lend(&toto);
lend(&toto);
println!("Hello world!");
}
Lend!
Lend!
Hello world!
Toto est détruit
fn main() {
let toto = Toto::new();
let toto_ref = &toto;
drop(toto);
lend(toto_ref);
}
fn lend(toto: &Toto) {
println!("Lend!")
}
Merci à toutes et tous 😃
@_Akanoa_
https://lafor.ge