Skip to content

Latest commit

 

History

History
28 lines (14 loc) · 1.54 KB

133、sizeof和strlen区别? C语言中malloc和C+ +语言中new有何区别? C_C++ 程序编译的内存分配情况?.md

File metadata and controls

28 lines (14 loc) · 1.54 KB

133、sizeof/strlen区别? C语言中malloc和C+ +语言中new有何区别? C/C++ 程序编译的内存分配情况?

sizeof和strlen的区别:

sizeof是一个操作符,可以用来获取一个变量或类型的字节数,不受变量值的影响。例如,sizeof(int)返回4,sizeof(char)返回1。 strlen是一个函数,用于获取一个字符串的长度,即字符数组中的字符个数,不包括字符串结束符'\0'。例如,strlen("hello")返回5。

malloc和new的区别:

malloc和new都是用于在堆上分配内存的函数。它们的主要区别在于以下几点:

malloc返回一个void*指针,需要强制转换为目标类型指针,而new直接返回目标类型指针。

malloc只负责分配内存,不会自动调用构造函数,而new在分配内存后会自动调用构造函数。

malloc分配的内存可以使用free函数释放,而new分配的内存必须使用delete操作符释放。

C/C++程序编译的内存分配情况:

在C/C++程序编译时,内存分配主要分为以下几种情况:

栈内存分配:用于存储局部变量和函数调用的参数和返回值。栈内存分配由编译器自动完成,不需要手动分配和释放。

堆内存分配:用于存储动态分配的内存,需要使用malloc或new函数手动分配,并在不需要时使用free或delete操作符释放。

全局变量和静态变量分配:在程序运行前就进行内存分配,存储在静态存储区或全局存储区,程序结束后才会释放。