首页 > 系统相关 >38. 内存分区代码分析

38. 内存分区代码分析

时间:2024-09-02 14:55:07浏览次数:15  
标签:tmp 38 return int 分区 include 内存 fun NULL


1. 返回栈区地址

#include <stdio.h>
int *fun()
{
    int a = 10;
    return &a;
}
int main(int argc, char *argv[])
{
    int *p = NULL;
    p = fun();
    *p = 100; // 操作野指针指向的内存,err
    
    return 0;
}

2. 返回data区地址

#include <stdio.h>

int *fun()
{
	static int a = 10;
    
	return &a; // 函数调用完毕,a不释放
}

int main(int argc, char *argv[])
{
    int *p = NULL;
    p = func();
    *p = 100; // ok
    printf("*p = %d\n", *p);
    
    return 0;
}

3. 值传递1

#include <stdio.h>
#include <stdlib.h>

void fun(int *tmp)
{
	tmp = (int *)malloc(sizeof(int));
	*tmp = 100;
}
int main(int argc, char *argc[])
{
	int *p = NULL;
	fun(p); // 值传递,形参修改不会影响实参
	printf("*p = %d\n", *p);
	
	return 0;
}

4. 值传递2

#include <stdio.h>
#include <stdlib.h>

void fun(int *tmp)
{
	*tmp = 100;
}

int main(int argc, char *argv[])
{
	int *p = NULL;
	p = (int *)malloc(sizeof(int));

	fun(p); //值传递
	printf("*p = %d\n", *p); //ok,*p为100

	return 0;
}

5. 返回堆区地址

#include <stdio.h>
#include <stdlib.h>

int *fun()
{
	int *tmp = NULL;
	tmp = (int *)malloc(sizeof(int));
	*tmp = 100;
	return tmp; // 返回堆区地址,函数调用完毕,不释放
}

int main(int argc, char *argv[])
{
	int *p = NULL;
	p = fun();
    printf("*p = %d\n", *p);//ok

    //堆区空间,使用完毕,手动释放
    if( p != NULL)
    {
        free(p);
        p = NULL;
    }
    
    return 0;
}


标签:tmp,38,return,int,分区,include,内存,fun,NULL
From: https://blog.51cto.com/zaishu/11898126

相关文章

  • swoole为什么能常驻内存
    Swoole作为一个高性能的PHP扩展,近年来受到了越来越多开发者的关注,其显著的特点之一就是能够常驻内存。这一功能使得Swoole在处理高并发、长连接和复杂业务场景时,表现出色。很多人可能会好奇,Swoole为什么能常驻内存,这背后有什么技术原理?本文将为你解答这一疑问。我们需要了......
  • 关于Flink内存分配核心知识点
    这个问题同样也是之前辅导过的同学的面试问题,这个问题非常接地气且考察面试者的实践经验。事实上,这也是我们大数据提高班的Flink专项提高部分内容。下面我列举的这些就是核心,能答出这些重点即可。内存模型在Flink1.9和Flink1.11版本做了非常大的改动,主要原因是为了统一Batch和Strea......
  • 多线程篇(ThreadLocal & 内存模型 & 伪共享(ThreadLocal ))(持续更新迭代)
    目录一、ThreadLocal1.前言2.简介3.与Synchronized的区别4.简单使用5.原理5.1.set5.2.get5.3.remove5.4.与Thread,ThreadLocalMap之间的关系5.常见使用场景场景一:存储用户Session场景二、数据库连接,处理数据库事务场景三、数据跨层传递(controller,servi......
  • 多线程篇(ThreadLocal & 内存模型 & 伪共享(内存可见性))(持续更新迭代)
    目录一、内存可见性问题(并发编程之美)二、Java内存模型(深入理解JVM第三版)1.简介2.硬件的效率与一致性3.Java内存模型3.1主内存与工作内存3.2内存间交互操作3.3对于volatile型变量的特殊规则3.4针对long和double型变量的特殊规则3.5原子性、可见性与有序性原......
  • 15、java 面向对象之二:对象的创建和使用(对象内存解析和匿名对象)、再谈方法(方法的重
    java面向对象之二:Ⅰ、对象的创建和使用:1、对象的内存解析:其一、描述:其二、内存解析代码1为:其三、内存解析截图1为:其四、内存解析代码2为:其五、内存解析截图2为:2、匿名对象的使用:其一、描述:其二、代码为:其三、截图为:3、自定义数组的工具类:其一、描述:其二、代码为:A、Arr......
  • 深入理解Java内存模型:对并发编程的影响
    深入理解Java内存模型:对并发编程的影响大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java并发编程中,内存模型是一个至关重要的概念,它定义了程序中各个变量的访问规则,以及在多线程环境下如何正确地处理这些变量。Java内存模型(JMM)是Java规范中定义的......
  • IO进程day06(进程间通信、信号、共享内存)
    目录【1】进程间通信IPC1》进程间通信方式2》无名管道1>特点2>函数接口3>注意事项练习:父子进程实现通信,父进程循环从终端输入数据,子进程循环打印数据,当输入quit结束。3》有名管道 1>特点2>函数接口3>注意事项 练习:通过两个进程实现cp功能 4>有名管......
  • 记一次Hyperf定时任务内存异常问题
    背景最近时不时收到K8S告警提示项目POD出现OOM问题,只要触发了项目重新部署或者把POD删掉,内存就恢复了,过了一段时间才缓慢增长(基本上要隔几天,这也是这个问题比较难定位和复现的原因)分析起初以为是某一个SQL没有限制limit或者是程序有死循环把内存跑满了,后面从日志看到......
  • 【解压即玩】PC极限竞速:地平线5 顶级豪华中文版 v1.656.386 全DLC 联机补丁810辆全车
    欢迎来到你的Horizon冒险之旅,在这个充满活力且不断变化的墨西哥开放世界中,你可以驾驶各种世界级名车,享受自由而有趣的驾驶体验,并开始一段令人惊叹的旅程。在这个多变的开放世界里,你可以探索各种截然不同但同样美丽的风景。从生机勃勃的沙漠、茂盛的丛林、历史悠久的城市,到......