惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
B
Blog
Stack Overflow Blog
Stack Overflow Blog
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
Recent Announcements
Recent Announcements
U
Unit 42
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
D
DataBreaches.Net
Microsoft Azure Blog
Microsoft Azure Blog
G
Google Developers Blog
M
MIT News - Artificial intelligence
P
Proofpoint News Feed
罗磊的独立博客
L
LangChain Blog
V
Visual Studio Blog
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
宝玉的分享
宝玉的分享

博客园 - 寒魔影

Linux waitpid函数分析 Linux 内存虚拟地址介绍 Sword B树学习笔记二 Sword B树学习笔记一 defined but not used警告屏蔽 apisix流量高峰期服务卡住问题 服务卡死现象分析实录 服务资源加载延迟异常增加 Linux 常用命令四 TCP全连接队列 调用writev收到信号SIGPIPE问题分析记录 epoll_wait监听事件延迟问题记录 writev发送数据失败 C++ new关键字运算符重载 Missing separate debuginfos类型崩溃分析 宏定义导致数据异常问题 服务压测偶现卡住问题分析 C语言 数据类型 Linux 终端光标控制函数
不同进程内相同的变量内存地址是相同的
寒魔影 · 2026-01-19 · via 博客园 - 寒魔影

问题描述

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

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)