Ce face os.Getpagesize
Sistemul de operare împarte memoria în pagini de dimensiune fixă. os.Getpagesize spune cât are una: 4096 octeți pe majoritatea sistemelor Linux x86, 16384 pe Mac-urile cu procesor Apple.
Valoarea contează rar în programele obișnuite; o folosești când aloci buffer-e aliniate, lucrezi cu fișiere mapate în memorie (mmap) sau vrei să alegi o dimensiune bună de buffer pentru citire.
Ce returnează
Dimensiunea paginii, în octeți.
Exemple
Exemplul 1: Dimensiunea paginii
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println("pagina de memorie:", os.Getpagesize(), "octeți")
}
Rezultat pe Linux x86-64 (pe un Mac cu procesor Apple: 16384)
pagina de memorie: 4096 octeți
Exemplul 2: Buffer multiplu de pagină
Rotunjim o dimensiune dorită în sus, la un multiplu al paginii.
package main
import (
"fmt"
"os"
)
func main() {
pagina := os.Getpagesize()
dorit := 10000
rotunjit := (dorit + pagina - 1) / pagina * pagina
fmt.Println("multiplu de pagină:", rotunjit%pagina == 0)
fmt.Println("cel puțin cât am cerut:", rotunjit >= dorit)
fmt.Println("putere a lui 2:", pagina&(pagina-1) == 0)
}
Rezultat
multiplu de pagină: true
cel puțin cât am cerut: true
putere a lui 2: true
Greșeli frecvente
- Scrii 4096 direct în cod ca dimensiune a paginii. Pe alte procesoare (Apple, unele ARM) pagina este mai mare.
Comenzi înrudite
os.Getpid: Getpid returnează ID-ul procesului curent; Getppid, ID-ul procesului care l-a pornit (părintele).os.Hostname: Returnează numele calculatorului (host name) raportat de sistemul de operare.