毕业了,想留的人没能留住,想要的生活也没有如约而至,也就这样了。。。

----  网易云热评

在程序没有执行前,有几个内存分区已经确定,虽然分区确定,但是没有加载内存,程序只有运行时才加载内存:

text(代码区):只读,例如函数

data:初始化的数据,全局变量,static变量,文字常量区

bss:没有初始化的数据,全局变量,static变量

stack:栈区,返回值,普通局部变量,自动管理内存,先进后出的特点

heap:堆区,手动申请空间malloc(),手动释放free(),程序结束自动回收

一、内存操作

1、memset,将一个数组的内存区域前n个成员用字符填充,主要用来重新初始化数据

#include <stdio.h>#include <string.h>int main() {int a[100];for (int i=0;i<10;i++){a[i] = i + 1;}printf("%d\n",a[1]);//将a的前sizeof(a)个元素,用0填充memset(a, 0, sizeof(a));printf("%d\n", a[1]);system("pause");return 0;}

2、memcpy,全拷贝,不管中间是否有结束符,memmove,如果内存重叠,用这个拷贝

#include <stdio.h>#include <string.h>int main() {char p[]="aiyou\0bucuo";char buf[100];int a = sizeof(p);printf("字符串长度:%d\n", a);strncpy_s(buf, 100, p,a);printf("buf1=%s\n", buf);printf("buf2=%s\n", buf + strlen("aiyou") + 1);//将buf初始化,用0填充memset(buf, 0, sizeof(buf));//拷贝,将p的内容拷贝到buf中,大小为amemcpy(buf,p,a);printf("buf3=%s\n", buf);printf("buf4=%s\n", buf + strlen("aiyou") + 1);system("pause");return 0;}

运行结果:

3、memcmp,比较数据是否相等

#include <stdio.h>#include <string.h>int main() {char a[] = "abc";char b[] = "abd";char c[] = "abc";printf("对比结果为:%d\r\n", memcmp(a,b ,sizeof(a)));printf("对比结果为:%d\r\n", memcmp(b, a, sizeof(a)));printf("对比结果为:%d\r\n", memcmp(a, c,sizeof(a)));system("pause");return 0;system("pause");return 0;}

运行结果:

二、堆栈操作

1、指向栈的指针

int *p;int a=0;p=&a;*p=111;

2、指向堆指针,参数指定堆区分配多大空间

int *p//手动申请堆空间p=(int *)malloc(sizeof(int));*p=111;.....//手动释放堆空间free(p);

欢迎关注公众号:顺便编点程

C语言内存及堆栈操作相关推荐

  1. 【C 语言】文件操作 ( C 语言中的文件操作函数 | 磁盘与内存缓冲区 | 缓冲区工作机制 )

    文章目录 一.C 语言中的文件操作函数 二.磁盘与内存缓冲区 三.缓冲区工作机制 一.C 语言中的文件操作函数 读取 文本文件 可以使用 getc , fgets , fscanf 函数 , 向 文本 ...

  2. 7-11 堆栈操作合法性 (20 分)以及堆栈讲解(c语言实现)

    关于堆栈: 1.它是什么 2.它为什么会出现/它的出现解决了什么问题 3.我们要怎么使用它 堆和栈到底是什么 栈和堆(托管堆)都存在于进程的虚拟内存中. 栈(Stack) 是操作系统在建立某个进程时或 ...

  3. c++ 使用未初始化的内存_C语言内存分布(内核区、堆栈区等)

    C语言内存分布(内核.变量,堆栈等) 内核区是提供给操作系统使用的.栈区是给局部变量使用的,局部变量是函数内定义的变量,包括函数系数:程序调用时把局部变量存的数据压入栈,程序退出时把局部变量存的数据弹 ...

  4. C语言--内存操作函数memmove

    文章目录 一.C语言--内存操作函数memmove 1.1 memmove函数介绍 1.2 memmove使用示例 二.模拟实现memmove函数 一.C语言–内存操作函数memmove 1.1 me ...

  5. 堆栈操作合法性 (C语言)

    题目详情 假设以S和X分别表示入栈和出栈操作.如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列.请编写程 ...

  6. C语言内存管理超详解

    补充: 1.一个正在运行着的C编译程序占用的内存分为栈区.堆区.未初始化数据区(BBS).初始化数据区.代码区5个部分. (1)栈区:存放函数的参数值.局部变量的值.由编译器自动分配释放. (2)堆区 ...

  7. 浅谈C语言内存(栈)

    浅谈C语言内存 文章目录 浅谈C语言内存 内存分配 栈 斐波纳契数列 内存分配 在C语言中内存分别分为栈区(stack).堆区(heap).未初始化全局数据区.已初始化全局数据区.静态常量区(stat ...

  8. C语言与JAVA内存管理_深入理解C语言内存管理

    之前在学Java的时候对于Java虚拟机中的内存分布有一定的了解,但是最近在看一些C,发现居然自己对于C语言的内存分配了解的太少. 问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及 ...

  9. c语言 linux sd_深入理解Linux C语言内存管理

    问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及语言中,内存管理都十分重要. 内存管理的基本概念 分析C语言内存的分布先从Linux下可执行的C程序入手.现在有一个简单的C源程序h ...

最新文章

  1. 免费开放!清华、智源、协和联合开发乳腺癌AI诊断工具,可预测分子亚型,准确率高达76%...
  2. 借力大数据 物流迈向智能化
  3. 独立成分分析 ( ICA ) 与主成分分析 ( PCA ) 的区别
  4. 【学术相关】数学公式如何用Markdown优雅地写出来
  5. C++内存管理全景指南
  6. 计算机对农业领域带来的变革,智慧农业将给农业带来哪些变化?
  7. “.Net 社区虚拟大会”(dotnetConf) 2016 Day 2 Keynote: Miguel de Icaza
  8. 数据库读写分离这个坑,你应该踩过吧?
  9. 三阶段提交协议(有限状态自动机)
  10. 贪心科技机器学习训练营(二)
  11. 高德开放平台GeoHUB初用(Vue使用高德地图Loca 2.0)
  12. linux软键盘怎么调出来,软键盘怎么关?软键盘关闭方法
  13. 使用C++ opencv将16位图像映射到8位
  14. 编写.bat执行jar包
  15. 读书笔记:-----《第四次工业革命转型的力量》
  16. gvim 换行符替换
  17. SIFT matlab代码
  18. ERROR 1396 (HY000): Operation CREATE USER failed for ‘xxx‘@‘%‘
  19. 计算机和机械类哪个工资高,机械类专业就业方向 哪个方向工资高
  20. 计算机系统都包括四个设备,假设某计算机系统中只有一个CPU、一台输入设备和一台输出设备,若系统中有四个作业 - 信管网...

热门文章

  1. ESP8266模块连接手机WIFI热点
  2. 5G边缘计算之会话及业务连续性(SSC)介绍
  3. python自动化爬取网易云歌词并制作词云图
  4. 浪潮军用计算机等级,浪潮欲抢先把“云计算”引入军工应用
  5. 创维集团总裁杨东文:智能家居各自为战缺乏统一标准
  6. Riverbed推出SteelFusion新型云及虚拟方案 为软件定义边缘部署提供更大灵活性
  7. StopWatch方法详解
  8. win10语音识别python_微软不愿意提及的软肋:Win10的语音识别
  9. c语言 pow优化_C语言性能优化
  10. SpringBoot配置Oracle数据库