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

推荐订阅源

Y
Y Combinator Blog
GbyAI
GbyAI
U
Unit 42
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
D
DataBreaches.Net
N
Netflix TechBlog - Medium
H
Hackread – Cybersecurity News, Data Breaches, AI and More
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
Check Point Blog
Martin Fowler
Martin Fowler
月光博客
月光博客
MongoDB | Blog
MongoDB | Blog
MyScale Blog
MyScale Blog
The Cloudflare Blog
Apple Machine Learning Research
Apple Machine Learning Research
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
罗磊的独立博客
B
Blog RSS Feed
J
Java Code Geeks
The GitHub Blog
The GitHub Blog

博客园 - 寒魔影

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)