小编zen*_*nna的帖子

C++:读取数据如何影响内存?

我最近一直在深入研究C++,我的错误似乎变得复杂了.

我有一个对象向量,每个对象包含一个浮点向量.我决定创建一个包含所有对象的所有浮点值的平面数组.它比这复杂一点,但问题的关键在于,当我遍历我的对象提取浮点值时,在某些时候我的对象向量被改变,或以某种奇怪的方式被破坏.(我的读操作都是const函数)

另一个例子是MPI.我刚刚开始,所以我只想在两个不同的节点上使用自己的内存运行完全相同的代码,并且不会发生数据传输,这一切都非常简单.令我惊讶的是,我得到了分段错误,经过几小时的跟踪,我发现一个变量的一个赋值就是将一个完全不同的变量设置为NULL.

所以我很好奇,读操作如何影响我的数据结构.同样,看似无关的操作如何影响另一个.我不能指望用这些简短的描述解决我的问题,但任何建议将不胜感激.

更新:这是代码的一部分,我最初没有发布,因为我不确定在不了解整个系统的情况下可以从中提取多少.

我刚刚发现的一件事是,当我停止将值分配给我的平面阵列而只是cout'ed时,seg错误消失了.所以也许我声明我的数组是错误的,但即使我是,我也不确定它会如何影响对象向量.

void xlMasterSlaveGpuEA::FillFlatGenes() {
    int stringLength = pop->GetGenome(0).GetLength();
    for (int i=0;i<pop->GetPopSize();i++)
        for (int j=0;j<stringLength;j++)
            flatGenes[(i*stringLength)+j]<< pop->GetGenome(i).GetFloatGene(j);
}

float xlVectorGenome::GetFloatGene(unsigned int i) const {
    return GetGene(i);
}
Run Code Online (Sandbox Code Playgroud)

我的平面数组是一个成员函数

float * flatFitness;
Run Code Online (Sandbox Code Playgroud)

像这样在构造函数中启动:

flatFitness = new float(popSize);
Run Code Online (Sandbox Code Playgroud)

更新2:

我只想指出上面两个例子没有关系,第一个不是多线程的.第二个MPI示例在技术上,但MPI是分布式内存,我故意尝试了我能想到的最简单的实现,这是两台机器独立运行代码.然而,有一个额外的细节,我提出了一个条件性的说法

if node 1 then do bottom half of loop

if node 1 then do top half
Run Code Online (Sandbox Code Playgroud)

内存应该是隔离的,它们应该工作就好像它们对彼此一无所知..但是删除这个条件并使两个循环都能完成所有多维数据集,消除了错误

c++ mpi corruption

5
推荐指数
1
解决办法
446
查看次数

(php/mysql)部署到共享主机的最佳实践?

我曾在一家网络开发公司工作,在那里我们有本地机器,一台临时服务器和一些生产服务器.我们在perl中处理mac并使用svn提交stage,并将perl脚本加载到生产服务器.现在我正在开发自己的项目,并希望在使用共享Web托管时找到良好的Web开发实践,而不是在基于unix的环境中工作(我可以使用perl/bash脚本/ cron作业完成所有的魔术)

所以我的问题是我的条件,它是:

  • 我正在使用来自外部提供商的单一标准共享虚拟主机(使用ssh访问)
  • 我正在与至少一个其他人合作,并打算使用SVN进行源代码管理
  • 我在Windows下开发php/mysql(但是使用linux是可能的)

您建议对代码/数据的测试,部署和迁移进行哪些设置?我在本地计算机上安装了xampp服务器,但不确定哪些方法用于在Windows下迁移数据等.

php deployment staging

5
推荐指数
1
解决办法
2285
查看次数

外键的命名约定

当(在mysql中)建立表之间的关系时,我遇到了命名困境。

例如,如果我正在创建一个网站,其中的项目可以由多个用户创建,也可以由多个用户读取,为了链接问题和用户表,我可能需要两个表。

**project_authors**
questionId
userId
Run Code Online (Sandbox Code Playgroud)

**project_bidders**
questionId
userId
Run Code Online (Sandbox Code Playgroud)

这里的问题是两个表看起来相同,但不包括表名。可能更有用的表示是

project_authors
questionId
authorId
Run Code Online (Sandbox Code Playgroud)

project_bidders
questionId
bidderID
Run Code Online (Sandbox Code Playgroud)

现在的问题是,authorId 和 readerId 实际上只是 userId,而名称并没有反映这一点,并且可能会误导性地表明authorId 和 bidderId 本身是唯一且不同的。

我确信我的示例会有很多漏洞,但我最近经常遇到这个问题,所以我的问题是你使用什么方法?

sql database database-design naming-conventions

5
推荐指数
1
解决办法
4164
查看次数

SQL,如何查询表中的多个外键?

我有一个项目表,其中有两个用户外键(user_id和winner_user_id),一个用于项目所有者,一个用于项目的获胜者.就像是

+----------------+-------------------------+------+-----+---------+----------------+
| Field          | Type                    | Null | Key | Default | Extra          |
+----------------+-------------------------+------+-----+---------+----------------+
| project_id     | int(10) unsigned        | NO   | PRI | NULL    | auto_increment | 
| start_time     | datetime                | NO   |     | NULL    |                | 
| end_time       | datetime                | NO   |     | NULL    |                | 
| title          | varchar(60)             | NO   |     | NULL    |                | 
| description    | varchar(1000)           | NO   |     | NULL    |                | 
| user_id        | int(11)                 | NO …
Run Code Online (Sandbox Code Playgroud)

mysql sql database

5
推荐指数
1
解决办法
8176
查看次数

CUDA中的共享内存库冲突:内存如何与库对齐

据我所知,共享内存被分为多个存储区,多个线程对同一个存储区内的单个数据元素的访问将导致冲突(或广播).

目前我分配了一个相当大的数组,它在概念上代表了几对两个矩阵:

__shared__ float A[34*N]
Run Code Online (Sandbox Code Playgroud)

其中N是对一对的第一浮筒16的数量,并且一个矩阵和以下18个浮子是第二.

问题是,对第一个矩阵的访问是无冲突的,但对第二个矩阵的访问存在冲突.这些冲突是不可避免的,但是,我的想法是,因为第二个矩阵是18,所有未来的矩阵都会错位到银行,因此会发生比必要更多的冲突.

这是真的,如果是这样我怎么能避免呢?

每次我分配共享内存时,它是从新银行开始的吗?我有可能做到这一点

__shared__ Apair1[34]
__shared__ Apair2[34]
...
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢

optimization cuda

5
推荐指数
1
解决办法
9811
查看次数

如何在柠檬中找到节点的邻居

在 Lemon C++ Graph Library 中,给定一个无向图中的节点,比如说,如何找到其他边连接的节点?

c++ graph

5
推荐指数
1
解决办法
2104
查看次数

如何防止在递归函数中使用不必要的内存

我刚刚编写了一个递归函数,我意识到我在函数中使用的所有变量都将保留在内存中,直到递归中断为止.如果我正在递归很多次或为后续递归函数调用中未使用的变量分配大量内存,这是否会导致大量浪费内存使用?

例如,在下面的例子中,仅vec2用于以下的递归,temp_int并且temp_vec将不必要地继续占用记忆.

int recurse(std::vector<int> arg_vec) {
  int temp_int i;

  std::vector<int> temp_vec;
  std::vector<int> vec2;

  //... do some processing with arg_vec and temp_vec and result is stored in vec2
  recurse(vec2)

  return if (some condition met);
}
Run Code Online (Sandbox Code Playgroud)

那么我应该使用新命令分配所有内存并在函数调用之前删除它们吗?或者是否有其他方法来处理这个问题

c++ memory recursion memory-management

5
推荐指数
2
解决办法
2526
查看次数

如何快速检查(非平凡)数字列表的等价性?

例如,我有一个整数列表1,2,2,3,4,1.我需要能够检查不同列表之间的等价(==).

但是,我并不是指一个简单的数字比较.这些列表中的每一个实际上表示集合分区,其中列表中的位置表示元素的索引,而数字表示组的索引.例如,在前者中,元素0和元素5在同一组中,元素1和2在同一组中,元素3和4都在它们各自的组中. 该组的实际索引并不重要,只有分组.

我需要能够在这个意义上测试等价,所以例如前面的列表将等同于5,3,3,2,9,5,因为它们具有相同的分组.

我这样做的方法是将数组减少为一种正常形式.我发现所有数字都与第一个数字具有相同的值,并将这些全部设置为0.然后我继续在列表中找到一个新数字,找到相同值的所有数字,并将它们全部设置为1.继续以这种方式.

在我的例子中,两个数字都会减少到会减少到0,1,1,2,3,0当然我可以只使用简单的比较来查看它们是否相同.

但是这很慢,因为我必须在列表上进行几次线性传递.那么为了减少追逐,有没有更有效的方法将这些数字减少到这种正常形式?

更一般地说,我可以一起避免这种减少,并以不同的,也许更有效的方式比较数组吗?

实施细节

  • 这些数组实际上是作为位集来实现的,以节省空间,所以我每次都必须遍历整个列表,因为没有rb_tree esque哈希继续进行.
  • 大量这些数组将存储在stl unordered_set中,因此应考虑对散列的要求

c++ algorithm optimization set data-structures

5
推荐指数
1
解决办法
387
查看次数

检测同一域的其他选项卡/窗口的存在

如果我在同一个域中打开两个(或更多)选项卡,是否有一种简单的方法来感知另一个选项卡的存在(以便控制我所做的计算)?我知道有一个 window.open() 函数,但我没有从另一个窗口打开一个窗口。相反,假设用户使用两个选项卡访问 mydomain.com。

我已经开始使用 HTML5 本地存储编写一些代码,我定期在其中留下消息并检查消息,但这似乎有点复杂。

html javascript cross-browser

5
推荐指数
1
解决办法
5555
查看次数

CORS Access-Control-Allow-Origin尽管标题正确

我试图在客户端和apache服务的python(django)服务器上使用jQuery(1.7.1)驱动的ajax设置简单的跨源资源共享.根据我读过的所有说明我的标题设置正确,但我不断收到以下错误:

XMLHttpRequest无法加载http://myexternaldomain.com/get_data.原产地的http://本地主机:8080没有被访问控制允许来源允许的.

我想要的标题(我不确定它甚至超过浏览器)发送是:

Request URL:http://myexternaldomain.com/get_data
Accept:application/json, text/javascript, */*; q=0.01
Origin:http://localhost:8080
Referer:http://localhost:8080/static/js/test-zetta.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11
Run Code Online (Sandbox Code Playgroud)

javascript代码是

    var request = $.ajax({
        url : "http://myexternaldomain.com/get_data",
        type : "POST",
        dataType : "json",
        crossDomain : true
    });
Run Code Online (Sandbox Code Playgroud)

请注意,origin设置正确.服务器Access-Control-Allow-Origin = *使用以下python代码添加标头

def process_response(self, response):
    if response.has_header('Access-Control-Allow-Origin'):
            return response

    response['Access-Control-Allow-Origin'] = '*'
    return response

def get_orders(request):
    """ Tell worker what to do """
    response_data = {}
    response_data['action'] = 'probe' …
Run Code Online (Sandbox Code Playgroud)

javascript xss cross-domain http-headers cors

5
推荐指数
2
解决办法
1万
查看次数