标签: memory-management

释放分配给存储在向量内的堆的内存

我通过将它的内存分配给堆来创建了一个向量.然后我创建10个字符串对象也分配给堆内存并将它们存储在向量中.我试图使用delete运算符释放与每个新字符串对象关联的内存,但我不是如何做到的.我正在使用C++ 11.

#include <vector>
#include <string>
#include <iostream>

using namespace std;

int main()
{
   vector<string> *v = new vector<string>;

   for(int i = 0; i < 10; i++) {
     // allocate a new string object on the heap
     string *a = new string("Hello World");
     //de-reference the string object
     v->push_back(*a);
   }

  // show the contents of the vector
  for(auto i = v->begin(); i != v->end(); ++i) {
    // okay so this makes a lot more sense than:
    // const string …
Run Code Online (Sandbox Code Playgroud)

c++ memory-management vector

0
推荐指数
1
解决办法
3229
查看次数

Go字符串变量的显示大小似乎不真实

请参阅示例:http://play.golang.org/p/6d4uX15EOQ

package main

import (
    "fmt"
    "reflect"
    "unsafe"
)

func main() {
    c := "foofoofoofoofoofofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo"
    fmt.Printf("c: %T, %d\n", c, unsafe.Sizeof(c))
    fmt.Printf("c: %T, %d\n", c, reflect.TypeOf(c).Size())
}
Run Code Online (Sandbox Code Playgroud)

输出:

c: string, 8 //8 bytes?!
c: string, 8
Run Code Online (Sandbox Code Playgroud)

好像这么大的字符串不能有这么小的尺寸!出了什么问题?

memory-management runtime go

0
推荐指数
1
解决办法
374
查看次数

CUDA恒定存储器应该是均匀访问的吗?

我的CUDA应用程序具有小于8KB的恒定内存.由于它都将被缓存,我是否需要担心每个线程访问相同的地址以进行优化?

如果是,我如何确保所有线程同时访问同一地址?

optimization memory-management cuda

0
推荐指数
1
解决办法
164
查看次数

DDMS中缺少VM堆选项卡

浏览关于内存分析的博客,并意识到我的DDMS工具中没有任何VM堆选项卡.搜索了整个工具,而不是找到它.我错过了一些东西,请你把我指向正确的地方.感谢您的帮助

我在Ubuntu中使用Android Studio

干杯

android memory-management

0
推荐指数
1
解决办法
523
查看次数

我怎么知道数组中的元素数量

我运行以下代码,但它一直打印"4"

为什么它的打印"4"而不是"12"?我可以使用malloc然后使用sizeof吗?(如果可以,那么如何)

#include<stdio.h>
int main()
{
    int arr1[3]={1,2,3};
    int *arr2=arr1,i;
    printf("%d",sizeof(arr2));
    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

c c++ arrays memory-management dynamic

0
推荐指数
3
解决办法
174
查看次数

释放指针向量的两种不同方法 - 为什么不起作用?

我有一个指向结构的指针向量.解除分配内存的第一种方法工作正常,但第二种方法在执行后会产生分段错误(核心转储).为什么会这样?两个看起来都对我不对.用g ++编译.

struct milkNode {
    int unitCost;
    int unitsAvail;
};

int main() {

    //previous code

    for (int i = 0; i < M; ++i) {
        milkNode *cur = new milkNode;
        cur->unitCost = cost;
        cur->unitsAvail = avail;
        allNodes.push_back(cur);
    }


    //Method 1, works fine
    vector<milkNode*>::iterator iter;

    for (iter = allNodes.begin(); iter != allNodes.end(); ++iter) {
        delete *iter;
    }

    allNodes.clear();

    //Method 2, segmentation fault after execution. Compiles without errors.
    //Segmentation fault occurs just before the last "after" is printed

    /*
    vector<milkNode*>::iterator iter;
    for …
Run Code Online (Sandbox Code Playgroud)

c++ pointers memory-leaks memory-management

0
推荐指数
1
解决办法
123
查看次数

HashMap <Integer,double []>等同于什么?

我刚刚了解了trove库以及它如何比JDK的Maps更高效.我之前使用哈希映射来存储totalSize = 2^N 双数组条目,如下所示:

final Map myTable = new HashMap(totalSize);

我想知道Trove中是否有同等级别的课程?或者是否有办法使用类TIntDoubleHashMapmyTable HashMap 创建相同的集合?

我将不胜感激任何帮助/建议.

java memory-management hashmap trove4j

0
推荐指数
1
解决办法
206
查看次数

删除在C++中用malloc分配的std :: string数组

这是我在以下问题的后续跟进:C++上带有malloc的字符串数组

正如我已经实现托尼d溶液,我已分配的内存用于阵列std::stringmalloc然后创建std:string用于与所述元件中的每一个new根据:

void* TP = malloc(sizeof (string) * SS);
for (int i = 0; i < SS; i++) {
  new (&((string*)TP)[i]) std::string(Token[i]);
}
Run Code Online (Sandbox Code Playgroud)

(Token是一个vector<string>SS一个int)

我知道这不推荐,我知道它不优雅,我知道有很多其他的解决方案来创建和填充这个数组,但我需要这样做

我现在遇到的问题是删除数组.因为我std::string单独创建每个但是数组的分配有一个malloc,在我的析构函数中我写了:

for (int i = 0; i < SS; i++) {
  delete (&((string*) TP)[i]);
}
free(TP);
Run Code Online (Sandbox Code Playgroud)

但是在跑步时,它free(TP)正在指责"双重自由或腐败".

通过评论free(TP)我解决运行时的问题(隐藏真正的问题),但我需要确保所有内存都被释放,因为这可能会导致类内的内存泄漏.

那么,删除TP的每个元素是否足以释放所有内存?根据我的理解,malloc已经独立分配了内存,它需要独立于std::string元素而自由; 但是,为什么我会收到此错误?

c++ arrays string memory-management

0
推荐指数
1
解决办法
555
查看次数

java.lang.OutOfMemoryError.Android的

我在开发我的应用程序时并没有太远,我得到了一个java.lang.OutOfMemoryError.这是logcat:

02-24 14:02:54.957: E/art(28628): Throwing OutOfMemoryError "Failed to allocate a 28 byte allocation with 8 free bytes and 8B until OOM" (recursive case)
02-24 14:02:54.965: E/art(28628): "FinalizerDaemon" daemon prio=5 tid=8 Runnable
02-24 14:02:54.965: E/art(28628):   | group="system" sCount=0 dsCount=0 obj=0x12c260e0 self=0xac4a5400
02-24 14:02:54.965: E/art(28628):   | sysTid=28641 nice=0 cgrp=apps sched=0/0 handle=0xac4b9b00
02-24 14:02:54.965: E/art(28628):   | state=R schedstat=( 2442370612 111306164 635 ) utm=229 stm=15 core=1 HZ=100
02-24 14:02:54.965: E/art(28628):   | stack=0xb40fe000-0xb4100000 stackSize=1036KB
02-24 14:02:54.965: E/art(28628):   | held mutexes= "mutator lock"(shared held)
02-24 14:02:54.965: …
Run Code Online (Sandbox Code Playgroud)

java performance android memory-management

0
推荐指数
1
解决办法
1990
查看次数

objective-C的shared_ptr/weak_ptr实现

注意到如何妥善执行在当前Objective-C的引用计数(见这里这里),我敢肯定,必须有在那里提供类似于C++的东西图书馆shared_ptrweak_ptr语义没有所有这些荒谬的额外的调用retain,并release应自动调用何时(指针)变量超出范围

这可能在ObjC上吗?我知道ObjC没有析构函数,所以当变量超出范围时,没有办法自动调用,但这些retain/ release调用怎么可能真的有必要呢?我是以错误的方式绕过这个吗?

memory-management raii reference-counting objective-c

-1
推荐指数
1
解决办法
296
查看次数