Linux glibc分配器似乎表现得很奇怪.希望有人可以对此有所了解.这是我的源文件:
first.cpp:
#include <unistd.h>
#include <stdlib.h>
#include <list>
#include <vector>
int main() {
std::list<char*> ptrs;
for(size_t i = 0; i < 50000; ++i) {
ptrs.push_back( new char[1024] );
}
for(size_t i = 0; i < 50000; ++i) {
delete[] ptrs.back();
ptrs.pop_back();
}
ptrs.clear();
sleep(100);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
second.cpp:
#include <unistd.h>
#include <stdlib.h>
#include <list>
int main() {
char** ptrs = new char*[50000];
for(size_t i = 0; i < 50000; ++i) {
ptrs[i] = new char[1024];
}
for(size_t i = …Run Code Online (Sandbox Code Playgroud) 我有一个分支到子进程的进程。如果父进程存在,则子进程不应存在。因此,如果父进程死亡,我在子进程中调用:: prctl(PR_SET_PDEATHSIG,SIGKILL)杀死它。最终发生的是父线程调用pthread_exit,该线程最终成为杀死子进程的催化剂。
这是我的代码:
parent.cpp:
#include <sys/prctl.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
#include <iostream>
void* run(void* ptr) {
std::cout << "thread:" << getpid() << ":" << std::hex << pthread_self() << ":" << std::dec << getppid() << std::endl;
auto pid = fork();
if ( pid != 0 ) {
sleep(1);
}
else {
char* arg = NULL;
execv("./child", &arg);
}
return NULL;
}
int main() {
std::cout << "main:" << getpid() << ":" << std::hex << pthread_self() << ":" << std::dec …Run Code Online (Sandbox Code Playgroud)