本文整理汇总了C++中Heap::alloc方法的典型用法代码示例。如果您正苦于以下问题:C++ Heap::alloc方法的具体用法?C++ Heap::alloc怎么用?C++ Heap::alloc使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Heap
的用法示例。
在下文中一共展示了Heap::alloc方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ltrace_input
void ltrace_input() {
// File format is
// 1900 16:43:29.397714 [08053bc1] malloc(9) = 0x0805e050
// 1900 16:43:29.397714 [08053bc1] realloc(0x0805e050, 100) = 0x0805e100
// 1900 16:43:29.398460 [08053bc1] free(0x08097c60) = <void>
char line[1000];
char call[1000],answer[1000];
unsigned int base, newBase, size, caller, pid, time;
int r,h,m,s;
printf("Reading input from ltrace's output\n");
while (!feof(stdin)) {
fgets(line, sizeof(line)-1, stdin);
line[1999]=0;
r=sscanf(line, "%d %d:%d:%d.%d [%p] %s = %s", &pid, &h, &m, &s, &time, &caller, &call, &answer);
if (r < 7) {
qprintf(("Unrecognized line: %s", line));
continue;
}
if (r < 8)
r=sscanf(line, "%d %d:%d:%d.%d [%p] %s %d) = %s", &pid, &h, &m, &s, &time, &caller, &call, &size, &answer);
time += ((h*60+m)*60+s)*1000000;
verprintf(4,("PID: %d TIME: %lu ADDR: %08x CALL: %s ANSWER: %s\n", pid, time, caller, call, answer));
if (pidToFollow == 0) pidToFollow = pid;
if (pidToFollow == -1 || pidToFollow == (int)pid) {
if (!strncmp(call,"malloc",6)) {
sscanf(answer, "0x%p", &base);
sscanf(call, "malloc(%d)", &size);
heap.alloc(base, size, time, pid, caller);
} else if (!strncmp(call, "calloc", 6)) {
sscanf(answer, "0x%p", &base);
sscanf(call, "calloc(%d, %d", &size, &s);
size *= s;
heap.alloc(base, size, time, pid, caller);
} else if (!strncmp(call, "free", 4)) {
sscanf(call, "free(0x%p)", &base);
heap.free(base, time, pid, caller);
} else if (!strncmp(call, "realloc", 7)) {
sscanf(call, "realloc(0x%p", &base);
sscanf(answer, "0x%p", &newBase);
printf("realloc(0x%x, %d) = 0x%\n", base, size, newBase);
heap.realloc(base, newBase, size, time, pid, caller);
}
}
}
}
示例2: test
virtual void test() {
Heap<Device> heap;
cout << " -- test " << __LINE__ << endl;
{
Obj<Device> root = heap.alloc(new Device);
print_heap(heap);
Obj<Device> child = heap.alloc(new Device(root));
print_heap(heap);
}
print_heap(heap);
cout << heap.size() << endl;
heap.gc();
cout << heap.size() << endl;
}
示例3: alloc
void alloc(ulen len)
{
Space mem=heap.alloc(len);
if( mem.len )
{
rec[rec_len].init(mem,random.next_uint<byte>());
rec_len++;
stat.count(OpAlloc);
}
else
{
stat.count(OpAllocNoMem);
}
}
示例4: truss_input
void truss_input() {
// File format is
// 4388/[email protected]: 0.3619 -> libSDtFwa:malloc(0x20, 0x87d4c, 0xc, 0xff31a000)
// 4388/[email protected]: 0.3630 -> libc:mmap(0xfe982000, 0x2000, 0x3, 0x12)
// 4388/[email protected]: 0.3638 <- libc:mmap() = 0xfe982000
// 4388/[email protected]: 0.3647 <- libSDtFwa:malloc() = 0xfe982000
// 4388/[email protected]: 0.3695 -> libSDtFwa:malloc(0x1ff0, 0x0, 0x0, 0xff31a000)
// 4388/[email protected]: 0.3706 -> libc:malloc(0x1ff0, 0x0, 0x0, 0xff31a000)
// 4388/[email protected]: 0.3717 <- libSDtFwa:malloc() = 0x48650
// 4388/[email protected]: 0.3724 -> libSDtFwa:malloc(0x800, 0x48650, 0xc, 0x2000)
// 4388/[email protected]: 0.3734 -> libc:malloc(0x800, 0x48650, 0xc, 0x2000)
// 4388/[email protected]: 0.3743 <- libSDtFwa:malloc() = 0x4a648
// 4388/[email protected]: 0.3751 -> libSDtFwa:malloc(0x8, 0x0, 0x0, 0x0)
// 4388/[email protected]: 0.3764 -> libc:mmap(0xfec02000, 0x2000, 0x3, 0x12)
// 4388/[email protected]: 0.3772 <- libc:mmap() = 0xfec02000
// 4388/[email protected]: 0.3781 <- libSDtFwa:malloc() = 0xfec02000
// 4388/[email protected]: 0.3788 -> libSDtFwa:malloc(0x10, 0x878c8, 0x71, 0x159a0)
// 4388/[email protected]: 0.3798 <- libSDtFwa:malloc() = 0xfeb12010
// 4388/[email protected]: 0.3808 -> libSDtFwa:malloc(0x8, 0x8759c, 0x11a, 0xff2913d0)
char line[1000];
char library[1000],*call,*arg, direction[1000];
unsigned int newSize, size, caller, pid, time;
unsigned int r,h,m,s,arg1,arg2,answer;
printf("Reading input from truss output\n");
while (!feof(stdin)) {
fgets(line, sizeof(line)-1, stdin);
line[999]=0;
r=sscanf(line, "%d%*s\t %d.%d\t%s %s 0x%p", &pid, &s, &time, &direction, &library, &arg2);
if (r != 6)
sscanf(line, "%d%*s\t %d.%d\t%s %s = 0x%p", &pid, &s, &time, &direction, &library, &answer);
time += s*10000;
call = strchr(library, ':');
if (!call) continue;
*call = 0;
call++;
arg = strchr(call, '(');
if (arg) {
*arg = 0;
if (direction[0] == '-') {
arg+=3;
sscanf(arg, "%p", &arg1);
}
}
fflush(stdout);
if (pidToFollow == 0) pidToFollow = pid;
if (pidToFollow == -1 || pidToFollow == (int)pid) {
verprintf(4,("PID: %d TIME: %lu AUX: %s LIB: %s CALL: %s ARG1: %x ARG2: %x ANSWER: %x\n", pid, time, direction, library, call, arg1, arg2, answer));
if (direction[0] == '-') {
// -> entering call
if (!strncmp(call, "free", 4)) {
if (strcmp("libc",library) && strcmp("libmtmalloc",library)) continue;
heap.free(arg1, time, pid);
} else if (!strcmp(call, "malloc"))
size = arg1;
else if (!strcmp(call, "realloc"))
newSize = arg2;
} else {
// <- returning from call
if (!strncmp(call,"malloc", 6)) {
heap.alloc(answer, size, time, pid);
} else if (!strncmp(call,"mmap", 4)) {
heap.mmap(answer, arg2, time, pid);
} else if (!strncmp(call, "realloc", 7)) {
heap.realloc(arg1, answer, newSize, time, pid);
}
}
}
}
}
示例5: ntsd_input
void ntsd_input() {
// File format is
// Opened log file 'c:\l'
/*
0:000> g
<ntdll!RtlAllocateHeap>
$tid=000005b4
Debugger (not debuggee) time: Tue Jun 22 18:07:47.186 2004 (GMT-3)
0006f904 77f8d88d 00070000 00180000 00000020
*** ERROR: Module load completed but symbols could not be loaded for calc.exe
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINNT\system32\SHLWAPI.DLL -
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINNT\system32\COMCTL32.DLL -
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINNT\system32\RPCRT4.DLL -
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINNT\system32\USER32.DLL -
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINNT\system32\GDI32.DLL -
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINNT\system32\msvcrt.dll -
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINNT\system32\SHELL32.dll -
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINNT\system32\ADVAPI32.DLL -
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINNT\system32\KERNEL32.DLL -
eax=00072858
</ntdll!RtlAllocateHeap>
<ntdll!RtlAllocateHeap>
$tid=000005b4
Debugger (not debuggee) time: Tue Jun 22 18:07:47.717 2004 (GMT-3)
0006f538 77f91e63 00070000 00000000 00000022
eax=00072890
</ntdll!RtlAllocateHeap>
<ntdll!RtlAllocateHeap>
$tid=000005b4
Debugger (not debuggee) time: Tue Jun 22 18:07:47.827 2004 (GMT-3)
0006f4f8 77f896b6 00070000 00000000 0000000c
eax=000728d0
</ntdll!RtlAllocateHeap>
<ntdll!RtlFreeHeap>
$tid=000005b4
Debugger (not debuggee) time: Tue Jun 22 18:07:47.957 2004 (GMT-3)
0006f52c 77f8970f 00070000 00000000 000728d0
eax=00000001
</ntdll!RtlFreeHeap>
<ntdll!RtlAllocateHeap>
$tid=000005b4
Debugger (not debuggee) time: Tue Jun 22 18:07:48.077 2004 (GMT-3)
0006f5ac 77f8b60c 00170000 00000000 0000001c
eax=00170688
</ntdll!RtlAllocateHeap>
<ntdll!RtlFreeHeap>
$tid=000005b4
Debugger (not debuggee) time: Tue Jun 22 18:07:48.218 2004 (GMT-3)
0006f5bc 77f8b644 00170000 00000000 00170688
eax=00000001
</ntdll!RtlFreeHeap>
<ntdll!RtlAllocateHeap>
$tid=000005b4
Debugger (not debuggee) time: Tue Jun 22 18:07:48.338 2004 (GMT-3)
0006f680 77f8301a 00070000 00000000 00000009
eax=000728d0
</ntdll!RtlAllocateHeap>
*/
char line[1000],*p,g[1000];
unsigned int caller, tid, time;
unsigned int r,h,m,s,arg1,arg2,arg3,arg4,answer;
printf("Reading input from ntsd output\n");
while (!feof(stdin)) {
fgets(line, sizeof(line)-1, stdin);
line[999]=0;
if (line[0] == '<' && line[1] == '/') {
// it's a closing tag
if (NULL != (p = strchr(line,'>'))) *p=0;
verprintf(4,("[%d] %d: %s(%x, %x, %x) = %x\n", tid, time, line, arg1, arg2, arg3, answer));
if (pidToFollow == 0) pidToFollow = tid;
if (pidToFollow == -1 || pidToFollow == (int)tid) {
if (!strcmp("</ntdll!RtlAllocateHeap",line))
heap.alloc(answer, arg3, time, tid, caller);
if (!strcmp("</ntdll!RtlReAllocateHeap",line))
heap.realloc(arg3, answer, arg4, time, tid, caller);
if (!strcmp("</ntdll!RtlFreeHeap",line))
heap.free(arg3, time, tid, caller);
}
}
// Thread ID
r = sscanf(line, "$tid=%p", &tid);
if (r==1) continue;
// Time
r = sscanf(line, "Debugger (not debuggee) time: %*s %*s %*s %d:%d:%d.%d", &h, &m, &s, &time);
if (r==4) {
time += ((((h*60)+m)*60)+s)*1000;
continue;
}
// Stack (Arguments)
r = sscanf(line, "%*p %p %p %p %p", &arg4, &arg1, &arg2, &arg3);
if (r == 4) {
caller = arg4;
continue;
//.........这里部分代码省略.........