C语言内存申请与使用

1. 使用malloc申请一块空间,模拟KV存储的一个节点存储数据信息。

#include<stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/resource.h>

typedef struct v_block *p_block;
struct v_block{

        p_block next;
        int free;
        char *key;
        char *value;
        char data[];

};

int main() {
p_block pmem=(p_block)malloc(40);
pmem->next=0;
pmem->free=0;
pmem->key=pmem->data;
int i;
char *s="one";
for(i=0;i<4;i++) {
        *(pmem->key+i)=s[i];
}
pmem->value=pmem->key+4;
char *va="this is a value";
for(i=0;i<15;i++) {
        *(pmem->value+i)=va[i];
}

printf("%s ",pmem->value);
printf("%s ",pmem->key);
return 0;
}
时间: 2024-08-29 18:29:01

C语言内存申请与使用的相关文章

C语言动态申请内存

动态内存:new出来的都是动态的,需要程序员手动创建和回收,但在java中有垃圾回收机制. 静态内存:定义出来都是静态的,int i;int j,系统自动创建和回收. #include <stdio.h> #include <malloc.h>//内存分配的头文件 main(){ int* p ;//在栈内存中申请p的空间 //这个函数的返回值为void* 所以要把他强转 p = (int*)malloc(4); //在堆内存申请4个字节的空间 *p = 123; printf(&

浅谈C语言内存管理、内存泄露、堆栈

1.内存分配区间: 对于一个C语言程序而言,内存空间主要由五个部分组成:代码段(.text).数据段(.data).静态区(.BSS).堆和栈组成. BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量和静态变量 (这里注意一个问题:一般的书上都会说全局变量和静态变量是会自动初始化的,那么哪来的未初始化的变量呢?变量的初始化可以分为显示初始化和隐式初始化,全局变量和静态变量如果程序员自己不初始化的话的确也会被初始化,那就是不管什么类型都初始化为0,这种没有显示初始

c语言内存四区模型

c语言内存四区模型:代码区,全局区(常量区),栈区,堆区 在全局区(常量区),两个字符串完全一样c++编译器只会定义一份 char * getBuf() { char buf[20]; strcpy(buf, "abcde"); return buf; } abcdX?  有乱码! 确实把内存地址返回了,但不能用 被调函数调用完毕,在临时区分配的内存统统消失 char *buf= (char *)malloc(sizeof(char)*20); 手动malloc申请一份内存,由程序员手

C语言内存话题

嵌入式软件工程师学习路线 朱有鹏老师语录:学习如走夜路,人多心里不慌. 1.嵌入式基础预科 2.ARM裸机全集 3.C语言高级专题 4.Uboot和系统移植 5.Linux应用编程和网络编程 6.Linux驱动开发实战 ---------------------------------------------------- 内存这个大话题 C语言:C语言中编译器帮我们管理直接内存地址.通过编译器提供的变量名等来访问内存. 大块内存通过API(malloc free)来申请释放内存. JAVA/C

内存申请和释放及堆连续

glibc 内存申请和释放及堆连续检查 C语言有两种内存申请方式: 1.静态申请:当你声明全局或静态变量的时候,会用到静态申请内存.静态申请的内存有固定的空间大小.空间只在程序开始的时候申请一次,并且不再释放(除非程序结束). 2.自动申请:当你声明自动变量的时候会使用自动申请.函数参数.局部变量都属于自动变量.这些变量空间在程序执行致相关语句块申请,离开语句块时释放. 还有一种内存申请方式:动态内存申请.C语言变量并不支持动态内存申请,这一功能由库函数实现.C里面没有动态这个存储类型!! 当你

C语言内存使用的常见问题及解决之道

一  前言 本文所讨论的“内存”主要指(静态)数据区.堆区和栈区空间(详细的布局和描述参考<Linux虚拟地址空间布局>一文).数据区内存在程序编译时分配,该内存的生存期为程序的整个运行期间,如全局变量和static关键字所声明的静态变量.函数执行时在栈上开辟局部自动变量的储存空间,执行结束时自动释放栈区内存.堆区内存亦称动态内存,由程序在运行时调用malloc/calloc/realloc等库函数申请,并由使用者显式地调用free库函数释放.堆内存比栈内存分配容量更大,生存期由使用者决定,故

c语言内存模型

文章一.C语言的内存分配模型 1.程序代码区:存放函数体的二进制代码. 2.全局区数据区:全局数据区划分为三个区域.全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域.常量数据存放在另一个区域里.这些数据在程序结束后由系统释放.我们所说的BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称. 3.栈区:由编译器自动

[转]JVM系列二:GC策略&amp;内存申请、对象衰老

原文地址:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037056.html JVM里的GC(Garbage Collection)的算法有很多种,如标记清除收集器,压缩收集器,分代收集器等等,详见HotSpot VM GC 的种类 现在比较常用的是分代收集(generational collection,也是SUN VM使用的,J2SE1.2之后引入),即将内存分为几个区域,将不同生命周期的对象放在不同区域里:young genera

关于内存申请的建议

1.小一点的内存可以不用申请空间,但是需要大一点的内存空间的时候,一定要手动申请内存 2.动态申请内存的标准写法: //char 型内存申请char *ApplyForCharTypeMemory (char *variable,int n){ variable = (char*)xml_malloc(n); if (variable==NULL){ printf("%s xml_malloc error\r\n",variable); } memset(variable,0,size