1.内存分5个区:栈区,堆区,静态区,常量区,代码区
栈 先进后出
栈底内存比栈顶内存高
char *fun() { // 注意此处是把常量区的字符串 “iphone” 拷贝到栈内存中。 char string[] = “iphone”; return string; // 栈内存返回是不安全的,禁止!!!!
}
2.静态区
1)只初始化一次2)如果初始没给值,默认值为零3)只用程序退出才释放(永远存在)
将变量定义的类型前加static 则该变量存储在静态存储区
3. void * calloc( unsigned n, unsigned size);
分配 n 个 size ⼤大⼩小的空间 , 并且把该内存上的所有字节清零。
4. void *realloc( void *p, unsigned newSize);
按给定的地址以及给定的⼤大⼩小重新分配
5. void * memset ( void *s , int c , size_t n)
从 s 指向的内存开始初始化 n 个字节的内容为 c
6. void * memcpy ( void *dest, const void *source , size_t n)
从 source 指向的内存开始拷⻉贝到 dest, 拷⻉贝 n 个字节
7. int memcmp( const void *buf1, const void *buf2, unsigned int count)
⽐比较 buf1 和 buf2 指向的内存是否相同 , ⽐比较 count 个字节
栈 先进后出
栈底内存比栈顶内存高
char *fun() { // 注意此处是把常量区的字符串 “iphone” 拷贝到栈内存中。 char string[] = “iphone”; return string; // 栈内存返回是不安全的,禁止!!!!
}
2.静态区
1)只初始化一次2)如果初始没给值,默认值为零3)只用程序退出才释放(永远存在)
将变量定义的类型前加static 则该变量存储在静态存储区
3. void * calloc( unsigned n, unsigned size);
分配 n 个 size ⼤大⼩小的空间 , 并且把该内存上的所有字节清零。
4. void *realloc( void *p, unsigned newSize);
按给定的地址以及给定的⼤大⼩小重新分配
5. void * memset ( void *s , int c , size_t n)
从 s 指向的内存开始初始化 n 个字节的内容为 c
6. void * memcpy ( void *dest, const void *source , size_t n)
从 source 指向的内存开始拷⻉贝到 dest, 拷⻉贝 n 个字节
7. int memcmp( const void *buf1, const void *buf2, unsigned int count)
⽐比较 buf1 和 buf2 指向的内存是否相同 , ⽐比较 count 个字节