github.com/MangoDowner/go-gm@v0.0.0-20180818020936-8baa2bd4408c/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 "time" 40 ) 41 42 func main() { 43 // ensure that we can function normally 44 var v [][]byte 45 for i := 0; i < 1000; i++ { 46 time.Sleep(10 * time.Microsecond) 47 v = append(v, make([]byte, 64<<10)) 48 } 49 }