【发布时间】:2011-09-13 15:57:05
【问题描述】:
相关代码:
write(-1, "test", sizeof("test"));
void * p = malloc(1024);
void * p2 = malloc(510);
write(-1, "hi", sizeof("hi"));
相关的strace输出:
write(4294967295, "test\0", 5) = -1 EBADF (Bad file descriptor)
brk(0) = 0x601000
brk(0x622000) = 0x622000
write(4294967295, "hi\0", 3) = -1 EBADF (Bad file descriptor)
我很惊讶这样的低级操作不涉及系统调用?
【问题讨论】:
-
我不明白你在问什么。
malloc调用调用brk系统调用。 -
通过测试我发现
brk不是由malloc生成的,因为如果我增加malloc的数量,brk不会增加。 -
您是说如果您删除了
malloc调用,那么brk调用就会从跟踪中消失? -
malloc 实现将预先从操作系统分配更多内存(虚拟地址空间),随后的调用将从这个预分配的池中提取。
标签: malloc system-calls