linux 数组动态分配内存,具体来说,fork()如何处理Linux中malloc()的动态分配内存?...

我有一个程序与一个父进程和一个子进程。在fork()之前,父进程称为malloc(),并用一些数据填充数组。在fork()之后,孩子需要该数据。我知道我可以使用一个管道,但以下代码似乎工作:

#include

#include

#include

#include

int main( int argc, char *argv[] ) {

char *array;

array = malloc( 20 );

strcpy( array, "Hello" );

switch( fork() ) {

case 0:

printf( "Child array: %s\n", array );

strcpy( array, "Goodbye" );

printf( "Child array: %s\n", array );

free( array );

break;

case -1:

printf( "Error with fork()\n" );

break;

default:

printf( "Parent array: %s\n", array );

sleep(1);

printf( "Parent array: %s\n", array );

free( array );

}

return 0;

}

输出为:

Parent array: Hello

Child array: Hello

Child array: Goodbye

Parent array: Hello

我知道在堆栈中分配的数据在小孩中可用,但是似乎在堆上分配的数据也可供小孩使用。同样,孩子也不能修改父进程的堆栈数据,子进程不能修改父进程的数据。所以我假设孩子得到自己的堆栈和堆数据的副本。

在Linux中总是这样吗?如果是,支持这一点的文档在哪里?我检查了fork()手册页,但它没有具体提到在堆上动态分配的内存。

谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值