小编xyz*_*xyz的帖子

编译的C++类是什么样的?

有了汇编指令和C程序的一些背景知识,我可以看到编译函数的样子,但有趣的是我从来没有仔细考虑过编译后的C++类是什么样的.

bash$ cat class.cpp
#include<iostream>
class Base
{
  int i;
  float f;
};

bash$ g++ -c class.cpp
Run Code Online (Sandbox Code Playgroud)

我跑了:

bash$objdump -d class.o
bash$readelf -a class.o
Run Code Online (Sandbox Code Playgroud)

但是我得到的东西很难理解.

有人可以解释一下或提出一些好的起点.

c++ compiler-construction linker elf

12
推荐指数
2
解决办法
5311
查看次数

具有测试工具的编码站点,用于基本数据结构,如链表,图形,字符串等

是否有任何编码站点具有基本数据结构的测试工具和基本问题,如数组,字符串,链表,图表邻接列表等,以便我可以刷新基本代码,如反转链表,检查链表是否是回文,排序链表,在字符串中查找子字符串等.这将使基本的DS刷子变得有趣.

我知道有像codechef和topcoder的网站,但从我所看到的,这些没有这样的基本列表,图形概念DS问题和测试工具.

并且,它也可以用于DS中的本科课程.

c linked-list

11
推荐指数
0
解决办法
285
查看次数

标记化和模式匹配如何在中文中起作用.

这个问题涉及计算和中文知识.我有中文查询,我有一个单独的中文短语列表我需要能够找到这些查询中的哪些有任何这些短语.

在英语中,这是一项非常简单的任务.我根本不懂中文,它的语义,语法规则等等.如果这个论坛中有人也懂中文,可以帮助我一些基本的理解,以及如何为中文做出模式匹配.

我有一个基本的看法,在中文中一个单元(中间没有任何空格)实际上可能意味着不止一个单词(这是正确的吗?).那么,是否存在关于多个单词如何在它们之间组合以作为一个单元脱颖而出的规则.这是令人困惑的,因为中文写作中有空格,即使没有空格的单元也有多个单词.

从计算的角度来看解释中文的任何链接,模式匹配等都是非常有用的.

java locale utf-8 internationalization cjk

10
推荐指数
1
解决办法
1701
查看次数

什么是换行符 - '\n'

这是一个非常基本的概念,但我从来没有能够很清楚地表达出来.我想拼写它,看看我哪里出错了.

如果必须,我将如何定义"换行符".如果我在unix(或windows)中创建一个新文件,那么该文件通过在名为"new line character"的文件中插入一个特殊字符来存储"行尾"信息.如果是这样,它的ascii值是多少?我记得在C程序中,我已经检查了符号'\n'的读取字符.为什么这个令人困惑的2个字符代表行尾字符..

bash$ cat states
California
Massachusetts
Arizona
Run Code Online (Sandbox Code Playgroud)

说,我想在行之间插入一个行间距,并希望输出表格:所需的输出:

California

Massachusetts

Arizona

bash$sed -e 's/\n/\n\n/g' states  does not work.
Run Code Online (Sandbox Code Playgroud)

为什么我不能在这里对待"新行字符"就像我会对待任何其他字符并运行类似上面命令的东西一样.(我知道有人可能会说这是sed的语法问题,但是请一个人解释一下不允许这样做的直觉,这样我就可以摆脱困惑.

同样,在vim编辑器中,我不能使用:%s/\n/\n \n/g.为什么这样?

我是否需要通过在sed和vim中使用反斜杠来进一步逃脱?

谢谢,

Jagrati

c unix vim newline sed

9
推荐指数
3
解决办法
10万
查看次数

在C程序中的函数中传递2D数组

下面的程序(一个将数组传递给函数的玩具程序)不能编译.请解释一下,为什么编译器无法编译(由于技术原因或标准原因?)

我还会看一些解释指针/多维数组的书(因为我对它们不满意),但是这里的任何现成指针都应该是有用的.

void print2(int ** array,int n, int m);

main()
{
    int array[][4]={{1,2,3,4},{5,6,7,8}};
    int array2[][2]={{1,2},{3,4},{5,6},{7,8}};
    print2(array,2,4);
}

void print2(int ** array,int n,int m)
{
    int i,j;
    for(i=0;i<n;i++)
    {
       for(j=0;j<m;j++)
       printf("%d ",array[i][j]);

       printf("\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

c arrays pointers multidimensional-array

9
推荐指数
2
解决办法
3万
查看次数

如何逐步运行Perl程序?

我有一个别人写的perl程序.当我运行它时,它默默地退出而不向日志文件写入任何内容.有没有办法我可以逐步运行这个Perl程序,由解释器逐行运行,从而看到它终止的位置?

debugging perl

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

为什么链接时不解析共享库的符号?

这是我在本网站上的第二篇文章,我努力了解与gcc的编译/链接过程.当我尝试生成可执行文件时,需要在链接时解析符号,但是当我尝试创建共享库时,在此库的链接时不会解析符号.当我尝试使用此共享库创建可执行文件时,它们可能会得到解决.动手:

bash$ cat printhello.c
#include <stdio.h>
//#include "look.h"

void PrintHello()
{
look();
printf("Hello World\n");
}

bash$ cat printbye.c
#include <stdio.h>
//#include "look.h"

void PrintBye()
{
look();
printf("Bye bye\n");
}

bash$  cat look.h
void look();

bash$ cat look.c
#include <stdio.h>

void look()
{
printf("Looking\n");
}

bash$ gcc printhello.c printbye.c
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
/tmp/cck21S0u.o: In function `PrintHello':
printhello.c:(.text+0x7): undefined reference to `look'
/tmp/ccNWbCnd.o: In function `PrintBye':
printbye.c:(.text+0x7): undefined reference to `look'
collect2: ld returned 1 exit …
Run Code Online (Sandbox Code Playgroud)

c c++ linux linker gcc

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

得到std :: bad_alloc错误; 如何交叉验证操作系统是否真的耗尽内存

我有一个C++程序/ Linux,它在运行的2-3秒内开始std::bad alloc在32GB RAM上发生吐出错误(并由包装调用者重新启动).我真正关心的是解决这个问题,但我想一步一步地建立我对这个问题的理解的信心.

看起来系统无法为new请求分配内存(这会在操作系统内存不足时发生).当程序运行时,在另一个终端上我sar以尽可能小的间隔运行命令(1秒),但我看到的kbcached是~24GB内存.为什么操作系统无法释放缓存并使该内存可用于new请求?1秒是太多时间(与程序运行的速度相比)或者我在这里做错了.

基本上我想交叉验证并确定操作系统确实耗尽内存,因此无法分配内存,然后从这一点开始.怎么做?

理想情况下,我希望在内存分配失败的时候获得系统统计信息,例如缓存,总耗尽内存等.

c++ operating-system memory-leaks memory-management

8
推荐指数
1
解决办法
275
查看次数

CPU如何进行减法

我有一些基本的疑惑,但每次我坐下来试试面试问题时,这些问题和我的怀疑都会出现.

说A = 5

B = -2

我说A + B. 我假设A和B是4字节CPU怎么做这个添加?我知道A的符号位(MSB)为0表示正整数,B的符号位为1表示负整数.

现在在C++程序中,我想打印A + B,ALU(算术逻辑单元)的加法模块首先检查符号位然后决定进行减法然后按照减法程序进行.如何进行减法将是我的下一个问题.

A = 5

B = 2

想要做AB计算机将需要2秒补充B并添加A + 2s补充并返回此(丢弃左侧的额外位)?

A = 2

B = 5

做AB在这种情况下,计算机是如何做的?

我知道任何if-then等类型的条件逻辑都将在ALU内部的硬件中完成.计算2s补码等,丢弃额外的位将全部在ALU内部的硬件中完成.ALU的这个组件是什么样的?

谢谢,

hardware math cpu subtraction alu

7
推荐指数
4
解决办法
2万
查看次数

trie或平衡二叉搜索树来存储字典?

我有一个简单的要求(也许是假设的):

我想存储英文单词字典(n个单词)并给出一个单词(字符长度为m),字典能够判断字词是否存在于字典中.什么是适合的数据结构?

一个平衡的二叉搜索树?在C++ STL关联数据结构中完成,如set,map

要么

字符串上的特里

一些复杂性分析: 在平衡的bst中,时间将是(log n)*m(比较2个字符串需要O(m)个时间字符)

在trie中,如果在每个节点,我们可以在O(1)时间内分支,我们可以找到使用O(m),但假设在每个节点,我们可以在O(1)时间内分支是无效的.在每个节点,最大可能分支将是26.如果我们在节点处想要O(1),我们将在每个节点上的字符上保持一个短数组索引.这将炸毁空间.在trie中的几个级别之后,分支将减少,因此最好保留下一个节点字符和指针的链接列表.

什么看起来更实用?任何其他权衡?

谢谢,

algorithm tree dictionary data-structures

7
推荐指数
1
解决办法
7384
查看次数