假设我已经声明了一个字符数组并从用户那里获取一个字符串,如下所示:
char s[100000];
std::cin>>s;
Run Code Online (Sandbox Code Playgroud)
现在说用户输入了字符串"Program".我的角色数组如下:
'P''r''o''g''r''a''m''\0'......(99992 remaining indices with no/junk values)
Run Code Online (Sandbox Code Playgroud)
有没有办法释放占用那些99992指数的空间?类似地,如果我有一个大小为100000的整数数组,并且我在运行时只使用前10个索引,那么有没有办法在我的程序运行期间调整我的数组大小.我知道我们可以为此目的使用向量但是有可能以某种方式使用数组吗?对于整数数组,我知道我们可以动态声明数组,然后按照我们的要求声明大小,但是说我有10个整数的数组,如下所示:
1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)
现在,我想只使用前9个索引和wnat来删除第10个索引.换句话说,随着动态分配,数组也可以动态删除吗?
编辑:我知道有可能使用STL,但我想知道我们是否可以在数组中做同样的事情?
我正在学习c ++,并想知道这样的程序是如何组织在主存储器中的.我知道有一个堆栈(带有堆栈框架)和一个堆.我知道动态分配的东西会在堆上分配它.这是由像malloc或的运营商完成的new.但我不能在这个小型的c ++程序中看到它们.
该程序由一个主类和一个名为的类组成MyClass.这堂课有:
int)main类定义了一个Myclass对象,并定义了一个指向该对象的指针.
那么 - 这一切如何在记忆中组织起来?
#include <iostream>
using namespace std;
class MyClass {
int i;
public:
MyClass(int n) {
i = n;
}
int get_nmbr() {
return this->i;
}
};
int main() {
MyClass myClass(100), *p;
cout << myClass.get_nmbr() << endl;
p = &myClass;
cout << p;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 原始数据类型(如char,bool和int)具有一些内存.假设char,它有1个字节的内存.当我们在代码中使用char变量时,变量必须要求1个字节的内存.在这种情况下,我们为什么不分配内存.因为我们从不为它分配内存,它如何使用内存,即在这种情况下CPU是否为它分配内存.我也读过某些地方,原始数据类型被放在堆栈上并在完成工作时被移除.什么样的堆栈?在这种情况下,堆栈是如何形成的?
在下面的代号中
#?include ?<stdio.h>
int main()
{
printf("Stack Overflow");
main();
}
Run Code Online (Sandbox Code Playgroud)
运行后,该程序编译器将打印"堆栈溢出"到栈overflow.Here我知道堆栈溢出意味着,这意味着它会打印,直到内存full.Here我的问题是它的内存是什么呢?堆栈的大小是多少?
编程中使用"堆栈"的频率如何?换句话说,如果我们用数组替换堆栈,我们会丢失一些东西吗?或者是否有任何特殊情况下堆栈不能被其他任何东西替换?我只是一个C++初学者,我所知道的堆栈就是他们用来存储数据的东西,所以这个主题对我来说似乎并不清楚.任何信息都是相关的.
我上课了myclass.在main函数中,我myclass在每次迭代中创建了类型的对象,并希望在每次迭代后删除它们.我还没有动态创建对象.我可以显式删除它们,因为迭代结束后我不需要它们.
class myclass{
int value;
void do_function();
};
int main()
{
for(int i=0;i<count;i++)
{
myclass obj;
obj.do_function();
}
}
Run Code Online (Sandbox Code Playgroud)
obj一次迭代后不需要该对象,但内存仍然存在.我怎样才能释放那段记忆?
我的主管在我的C代码中看到的内容类似于:
size = f(some parameters);
int array[size];
Run Code Online (Sandbox Code Playgroud)
他说最好分配这样的数组malloc.他的描述是这样的:
将它分配到堆栈上需要您的堆栈在程序的整个运行时间内保持有效.
我不知道他的意思是什么,所以这就像我记得在会议结束时他的措辞一样,不知道实际意义.他的意思是什么?(或者,也许有人可以解释不以这种方式声明数组的另一个原因).
我创建了一个示例代码,因为我试图让自己进入汇编。我在堆栈上声明并初始化一个整数,并对堆上的一个整数也做同样的事情。在查看汇编代码时,它们都会产生非常相似的代码:
mov dword ptr [ebp-8],0 ; this is on the stack
mov dword ptr [ebp-14h],0 ; this is on the stack
mov eax,dword ptr [ebp-20h] ; this is on the heap
mov dword ptr [eax],0 ; this is on the heap
Run Code Online (Sandbox Code Playgroud)
你能解释一下我忽略了什么吗?
拆解的相关部分可以在下面找到:
int x = 0;
00111848 mov dword ptr [ebp-8],0
int y = 0;
0011184F mov dword ptr [ebp-14h],0
int* z = new int;
00111856 push 4
00111858 call 00111325
0011185D add esp,4
00111860 mov dword ptr [ebp+FFFFFF14h],eax …Run Code Online (Sandbox Code Playgroud) 我正在使用CUDA添加两个矩阵,并将结果提供给另一个矩阵.我希望利用共享内存功能,为此,我写了以下内容:
#include <stdio.h>
#include <cuda.h>
#define grid 1024
#define BSZ 16
__global__ void addition(int *dev_a, int *dev_b, int *dev_c)
{
__shared__ int as[BSZ][BSZ];
__shared__ int bs[BSZ][BSZ];
int by = blockIdx.y;
int bx = blockIdx.x;
int cvalue;
int ty = threadIdx.y;
int tx = threadIdx.x;
int row = by * BSZ + ty;
int col = bx * BSZ + tx;
as[ty][tx] = dev_a[row*grid + col];
bs[ty][tx] = dev_b[row*grid + col];
__syncthreads();
cvalue = as[ty][tx] + bs[ty][tx];
__syncthreads();
dev_c[row*grid + col] …Run Code Online (Sandbox Code Playgroud) 我知道在c语言中,我需要在分配后释放内存.(我来自java),对此我有几个问题:
当我在做的时候:
int array[30];
Run Code Online (Sandbox Code Playgroud)
(即创建一个大小为30的整数数组)这与做什么一样?
int array[] = malloc(sizeof(int)*30);
Run Code Online (Sandbox Code Playgroud)作为第一个问题的序列,当我在函数内部创建数组(即函数的本地数据而不是整个文件的全局数据)时,我是否需要在创建它的函数内释放此数组的内存?(我没有看到任何其他方法来释放它,因为我无法传递创建回main()函数的所有数组的引用).
所以简而言之,我想知道我何时需要为创建的对象/基元(在函数内部或外部)释放内存.