提问人:Mikayel Smbatyan 提问时间:10/25/2023 更新时间:10/30/2023 访问量:222
C++ 头文件更改程序中断
C++ header files changes program break
问:
我不明白为什么这段代码会打印不同的程序中断
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <ftw.h>
#include <stdlib.h>
int main()
{
int max_size = 1024;
char* ptr[max_size];
int blockCount = 1000;
int blockSize = 4*1024*1024;
int from = 1;
int to = blockCount;
int step = 1;
int i;
printf("Program break: 0x%p\n", sbrk(0));
for(i = 0; i < blockCount; ++i)
{
ptr[i] = (char*)malloc(blockSize);
}
printf("Program break: 0x%p\n", sbrk(0));
for(int i = from; i < to; i += step)
{
free((char*)ptr[i]);
}
printf("Program break: 0x%p\n", sbrk(0));
}
输出:
Program break: 0x0x5604211f1000
Program break: 0x0x560421212000
Program break: 0x0x560421212000
但是,如果我在文件的开头加上一个,它会打印相同的程序中断。#include <iostream>
输出:
Program break: 0x0x556617053000
Program break: 0x0x556617053000
Program break: 0x0x556617053000
它会更改标题中的程序中断吗?
如果是这样,什么可能会更改头文件中的程序中断?
此外,如果编译为 C 代码,则最后一个程序中断指向初始代码。好像返回未使用的页面。
但在 C++ 的情况下,它不会发生。free
G++ 版本:9.4.0
编译选项:-O0
操作系统/ABI:UNIX - System V
ABI 版本:0
内核版本:5.15.0-87-generic
发行版:Ubuntu 20.04.6 LTS
答:
评论
std::cout
sbrk
malloc
<iostream>