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操作符释放。
全局变量和静态变量分配:在程序运行前就进行内存分配,存储在静态存储区或全局存储区,程序结束后才会释放。