大兴安岭地区网站建设_网站建设公司_jQuery_seo优化
2026/1/19 10:55:13 网站建设 项目流程

不同进程内相同的变量内存地址是相同的

问题描述

今天有同事反馈同一个类创建的不同对象实例表现一样。

void * 
test_plugin_instance_new(void* loaded_resource, const char* cuda_path, const char* param, int param_len) 
{   int pid = (int)getpid();plugin_instance_t* instance = (plugin_instance_t*)malloc(sizeof(plugin_instance_t));if (instance == NULL) {return NULL;}fprintf(stderr, "[debug] pid:%d, addr:%p\n", pid, instance);instance->resource = (plugin_resource_t*)loaded_resource;return instance;
}

我的服务是多进程架构,上述代码会在多个进程中执行,通过加日志,发现所有进程中打印的instance的地址是相同。

image

 我也是第一次看到这种情况,感觉比较疑惑。

问题分析

通过查询资源,原因是linux虚拟内存地址的影响

问题小结

不同的进程一般不会出现相同的虚拟内存地址,但是我的进程都是从主进程fork出来的并且执行的逻辑完全相同,导致较大概率出现了相同的虚拟内存地址,详情分析如下

Linux 虚拟地址介绍 - 寒魔影 - 博客园 (cnblogs.com)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询