github.com/kidsbmilk/gofronted_all@v0.0.0-20220701224323-6479d5976c5d/libgo/misc/cgo/testasan/main.go (about) 1 // Copyright 2013 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 /* 8 #include <sys/mman.h> 9 #include <pthread.h> 10 #include <unistd.h> 11 12 void ctor(void) __attribute__((constructor)); 13 static void* thread(void*); 14 15 void 16 ctor(void) 17 { 18 // occupy memory where Go runtime would normally map heap 19 mmap((void*)0x00c000000000, 64<<10, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED, -1, 0); 20 21 // allocate 4K every 10us 22 pthread_t t; 23 pthread_create(&t, 0, thread, 0); 24 } 25 26 static void* 27 thread(void *p) 28 { 29 for(;;) { 30 usleep(10000); 31 mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); 32 } 33 return 0; 34 } 35 */ 36 import "C" 37 38 import ( 39 "fmt" 40 "os" 41 "path/filepath" 42 "time" 43 ) 44 45 func main() { 46 start := time.Now() 47 48 // ensure that we can function normally 49 var v [][]byte 50 for i := 0; i < 1000; i++ { 51 time.Sleep(10 * time.Microsecond) 52 v = append(v, make([]byte, 64<<10)) 53 } 54 55 fmt.Printf("ok\t%s\t%s\n", filepath.Base(os.Args[0]), time.Since(start).Round(time.Millisecond)) 56 }