草庐IT

C++删除没有括号的数组内存仍然有效吗?

这个问题在这里已经有了答案:Isdelete[]equaltodelete?(6个答案)howtoproperlydeleteapointertoarray(6个答案)HowdoIusearraysinC++?(5个答案)dynamicallyallocatedstringarraysfailedtobedeallocated(2个答案)关闭9年前。int*arr=newint[count];deletearr;为什么会这样?我已经检查过,它实际上释放了内存。根据我的阅读,我需要delete[]arr;否则它实际上不会释放所有内存。

c++ - 结构中的内存布局差异

我在C++中有以下结构structA{inta;doubleb;floatc;}这个结构和添加了函数的结构在内存布局上有区别吗?structB{inta;doubleb;floatc;voidfoo();}B::foo(){//dostuff} 最佳答案 C++标准保证C结构和C++类(或结构——相同的东西)的内存布局是相同的,前提是C++类/结构符合POD(“普通旧数据”)的标准.那么POD是什么意思呢?一个类或结构是POD,如果:所有数据成员都是公共(public)的,它们本身是POD或基本类型(但不是引用或指向成员的指针类型)

c++ - 递归函数的内存分配

调用递归函数时内存是如何分配的?一个函数有它自己分配的内存。当它被调用时,参数(不是引用传递的参数)和变量获得内存。那么,当从函数体内再次调用该函数时,如何将内存分配给第二次调用的变量和参数? 最佳答案 递归函数与任何其他函数没有什么不同——自动局部变量通过将堆栈指针推进到足够远以说明它们的大小总和(加上对齐所需的任何填充)而作为单个block分配。每个递归调用都会以这种方式压入一个新的堆栈帧,然后在返回时将其弹出。如果递归未能达到基本情况,堆栈将迅速耗尽,导致同名的StackOverflow崩溃。

c++ - 释放内存的重要性?

这个问题在这里已经有了答案:关闭13年前。PossibleDuplicate:WhatREALLYhappenswhenyoudon’tfreeaftermalloc?在C/C++中结束程序时,您必须通过释放指针来清理。如果你不释放内存会发生什么,比如你有一个指向int的指针并且在程序结束时没有删除它?内存是否还在使用,只能重启才能释放,还是程序结束时自动释放?在最后一种情况下,如果操作系统为您做了,为什么要释放它?

c++ - 为什么偏爱数据结构对齐?

结构的每个成员的类型通常有一个默认的对齐方式,即每个结构成员都在预先确定的边界上对齐。出于这个原因,填充在以下wiki示例中执行:structMixedData{charData1;shortData2;intData3;charData4;};structMixedData/*Aftercompilationin32-bitx86machine*/{charData1;/*1byte*//*1byteforthefollowing'short'tobealignedona2byteboundaryassumingthattheaddresswherestructurebeginsis

c++ - 当 C++ 程序结束时,指针是否从内存中释放?

这是一个初学者问题,但我用C#学习编程,现在我正在转向C++,现在我正在使用指针,我知道当我完成它们时我必须从内存中释放它们,但是当程序已关闭,它们是从内存中删除还是留在那儿? 最佳答案 当您的程序结束时,它使用的所有内存(无论是否动态分配)都会返回给操作系统。不管它是C程序、C++程序、C#程序还是您可能正在编写的任何其他类型的程序。现在,仅仅因为操作系统会回收内存并不意味着您可以对内存管理漫不经心。当您的程序运行时,您应该设法释放您已完成的所有内存。不这样做会导致“内存泄漏”,而这些肯定会影响您的程序及其运行的系统,至少在您的程

c++ - 为什么 bool 看起来占用的内存和 int 一样多? C++

当我在devcpp运行这个程序时,任务管理器说它大约有79MB。使用gnuc++4.7的Codeforces说它是79112KB#includeconstintN=10010,K=1010;structTPos{intcharge;boolex;TPos(){charge=1但是当exparametr被注释时:#includeconstintN=10010,K=1010;structTPos{intcharge;//boolex;TPos(){charge=1只有39536KB。我认为boolean值应该使用一个字节。为什么它的大小增加了一倍? 最佳答案

c++ - "factor out"公共(public)字段有什么办法可以节省空间?

我有一个大数组(>数百万)Item,其中每个Item都具有以下形式:structItem{void*a;size_tb;};有一些不同的a字段——这意味着有许多项具有相同的a字段。我想“分解”这些信息以节省大约50%的内存使用量。但是,问题在于这些Item具有重要的顺序,并且可能会随着时间的推移而改变。因此,我不能继续为每个不同的a创建一个单独的Item[],因为那样会丢失项目之间的相对顺序。另一方面,如果我存储size_tindex;字段中所有项目的顺序,那么我将失去因删除void*a;字段。那么有没有办法让我在这里真正节省内存,或者没有?(注意:我已经可以想到例如使用unsigne

c++ - 通过指向指针的指针访问结构元素的地址

假设我有一个结构:structABC{chara;charb;charc;}我可以将指向上述结构的指针声明为:结构ABC**abc现在abc是一个指向结构指针*abc的指针,而*abc是一个指向结构的结构指针美国广播公司。因此;sizeof(**abc)将为4,sizeof(*abc)也将为4而sizeof(abc)将为3(考虑指针大小为4个字节,字符大小为1个字节)。我的问题是:如何使用上面声明的abc声明一个指向成员变量c的字符指针? 最佳答案 sizeof(**abc)willbe4,sizeof(*abc)willalsob

C++堆或堆栈分配?

这是栈上的分配:charinStack[10];//andMyStructcl;这应该在堆中分配:char*inHeap=newchar[10];//andMyClasscl=newMyClass();如果MyClass包含一个chartest[10]变量怎么办?这样做:MyClasscl=newMyClass()...意味着MyClass::test的10字节长的内容分配在堆中而不是堆栈中? 最佳答案 会在对象内部分配,这样如果对象在堆上,数组也会在堆上;如果对象在栈上,数组也会在栈上;如果对象在可执行文件的静态内存中,数组也会在