Tag: heap

函数中的struct指针范围

如果我在函数中有以下内容: struct example *A=malloc(sizeof(struct example)); 节点/内存空间是否在函数结束/离开后A点指向被销毁? 还是它留在堆里?

尝试释放堆管理器分配的内存时会发生什么,分配的内容超过了要求?

我在接受采访时问了这个问题。 假设char * p = malloc(n)分配多于n,分配N个字节的内存,free(p)用于释放分配给p的内存。 堆管理器可以执行这样的错误分配吗? 现在发生了什么,将释放n个字节或释放N个字节? 有什么方法可以找到释放多少内存? 编辑 有什么方法可以找到释放多少内存? 有总比没有好, mallinfo()可以像“Fred Larson”所指出的那样轻松一些

用fork()共享堆内存

我正在使用C实现一个数据库服务器,它将处理来自多个客户端的请求。 为此,我使用fork()来处理各个客户端的连接。 服务器将数据存储在堆中,该数据包含一个指向动态分配记录的哈希表的根指针。 记录是具有指向各种数据类型的指针的结构。 我希望进程能够共享此数据,以便当客户端对堆进行更改时,其他客户端将看到更改。 我已经知道fork()使用COW(Copy On Write) ,我的理解是,当子进程尝试修改内存中的数据时,它将复制父进程的堆(和堆栈)内存。 我发现我可以使用shm库来共享内存。 – 是否足以共享数据库的根指针或是否必须将所有已分配的内存分享? – 如果孩子分配内存,父/其他孩子能够访问它吗? – 如果一个孩子分配内存并且后来被杀死,分配的内存是否仍然留在堆上? 那么例如下面的代码是一种共享堆内存的有效方式(在shared_string中)? 如果一个孩子使用类似的代码(即从//开始),其他孩子在孩子跑步和死亡之后能够读/写吗? key_t key; int shmid; key = ftok(“/tmp”,’R’); shmid = shmget(key, 1024, 0644 | IPC_CREAT); //start char * string; string = malloc(sizeof(char) * 10); strcpy(string, “a string”); char * shared_string; shared_string = shmat(shmid, string, 0); strcpy(shared_string, string);