74 lines
2.4 KiB
Odin
74 lines
2.4 KiB
Odin
package examples
|
|
|
|
import "core:fmt"
|
|
import "core:mem"
|
|
import "core:os"
|
|
|
|
main :: proc() {
|
|
//----- Tracking allocator ----------------------------------
|
|
{
|
|
tracking_temp_allocator := false
|
|
// Temp
|
|
track_temp: mem.Tracking_Allocator
|
|
if tracking_temp_allocator {
|
|
mem.tracking_allocator_init(&track_temp, context.temp_allocator)
|
|
context.temp_allocator = mem.tracking_allocator(&track_temp)
|
|
}
|
|
// Default
|
|
track: mem.Tracking_Allocator
|
|
mem.tracking_allocator_init(&track, context.allocator)
|
|
context.allocator = mem.tracking_allocator(&track)
|
|
// Log a warning about any memory that was not freed by the end of the program.
|
|
// This could be fine for some global state or it could be a memory leak.
|
|
defer {
|
|
// Temp allocator
|
|
if tracking_temp_allocator {
|
|
if len(track_temp.allocation_map) > 0 {
|
|
fmt.eprintf("=== %v allocations not freed - temp allocator: ===\n", len(track_temp.allocation_map))
|
|
for _, entry in track_temp.allocation_map {
|
|
fmt.eprintf("- %v bytes @ %v\n", entry.size, entry.location)
|
|
}
|
|
}
|
|
if len(track_temp.bad_free_array) > 0 {
|
|
fmt.eprintf("=== %v incorrect frees - temp allocator: ===\n", len(track_temp.bad_free_array))
|
|
for entry in track_temp.bad_free_array {
|
|
fmt.eprintf("- %p @ %v\n", entry.memory, entry.location)
|
|
}
|
|
}
|
|
mem.tracking_allocator_destroy(&track_temp)
|
|
}
|
|
// Default allocator
|
|
if len(track.allocation_map) > 0 {
|
|
fmt.eprintf("=== %v allocations not freed - main allocator: ===\n", len(track.allocation_map))
|
|
for _, entry in track.allocation_map {
|
|
fmt.eprintf("- %v bytes @ %v\n", entry.size, entry.location)
|
|
}
|
|
}
|
|
if len(track.bad_free_array) > 0 {
|
|
fmt.eprintf("=== %v incorrect frees - main allocator: ===\n", len(track.bad_free_array))
|
|
for entry in track.bad_free_array {
|
|
fmt.eprintf("- %p @ %v\n", entry.memory, entry.location)
|
|
}
|
|
}
|
|
mem.tracking_allocator_destroy(&track)
|
|
}
|
|
}
|
|
|
|
args := os.args
|
|
if len(args) < 2 {
|
|
fmt.eprintln("Usage: examples <example_name>")
|
|
fmt.eprintln("Available examples: hellope-shapes, hellope-text, hellope-clay")
|
|
os.exit(1)
|
|
}
|
|
|
|
switch args[1] {
|
|
case "hellope-clay": hellope_clay()
|
|
case "hellope-shapes": hellope_shapes()
|
|
case "hellope-text": hellope_text()
|
|
case:
|
|
fmt.eprintf("Unknown example: %v\n", args[1])
|
|
fmt.eprintln("Available examples: hellope-shapes, hellope-text, hellope-clay")
|
|
os.exit(1)
|
|
}
|
|
}
|