小编Gri*_*wes的帖子

如何连接字符串和const char?

我需要在c中加入"hello world".我怎样才能做到这一点 ?

string a = "hello ";
const char *b = "world";

const char *C;
Run Code Online (Sandbox Code Playgroud)

c++ string

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

从可变参数模板实例化调用函数时调用意外的重载

假设以下代码:

#include <iostream>

template<typename... T>
void foo(const T &...);

template<unsigned N>
void foo(const char (&)[N])
{
   std::cout << "char(&)[N]" << std::endl;
}

void foo(const char *)
{
   std::cout << "const char *" << std::endl;
}

template<typename T>
void foo(const T &)
{
   std::cout << "Single" << std::endl;
}

template<typename First, typename... T>
void foo(const First & first, const T &... rest)
{
   std::cout << "Generic + " << sizeof...(T) << std::endl;
   foo(first);
   foo(rest...);
}

int main()
{
    const char * …
Run Code Online (Sandbox Code Playgroud)

c++ templates forwarding variadic-templates

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

共享内存段内的指针

我一直在尝试这几个小时,谷歌所有我想到的东西,但我会发疯.

我有一个结构:

typedef struct {
  int rows;
  int collumns;
  int* mat;
  char* IDs_row;
} mem;
Run Code Online (Sandbox Code Playgroud)

我不知道int*(一个矩阵)和char*的大小,直到稍后.

当我这样做时,我创建了这样的共享内存:

mem *ctrl;
int size = (2 + ((i-1)*num_cons))*sizeof(int) + i*26*sizeof(char); //I have the real size now
shmemid = shmget(KEY, size, IPC_CREAT | 0666);
if (shmemid < 0) {
    perror("Ha fallado la creacion de la memoria compartida.");
    exit(1);
}
ctrl = (mem *)shmat(shmemid, 0, 0);
if (ctrl <= (mem *)(0)) {
    perror("Ha fallado el acceso a memoria compartida");
    exit(2);
}
Run Code Online (Sandbox Code Playgroud)

这里没问题.然后我给ctrl-> rows和collumns一个值,并为所有矩阵赋值0.

但在那之后,我在char*和bam中写了一些东西,分段错误.

调试程序我看到指针,mat和IDs_row都为null.如何在共享内存段中为它们提供正确的值? …

c linux shared-memory

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

系统调用与函数调用之间的性能差异

我经常听司机开发人员说尽可能避免内核模式切换.我无法理解确切的原因.从我的理解开始是 -

  1. 系统调用是软件中断.在x86上,它们由使用指令sysenter触发.这实际上看起来像是从机器特定寄存器获取目标的分支指令.
  2. 系统调用实际上不必更改地址空间或进程上下文.
  3. 但是,它们确实在进程堆栈上保存寄存器,并将堆栈指针更改为内核堆栈.

在这些操作中,系统调用几乎像普通函数调用一样工作.虽然sysenter可能表现得像一个错误预测的分支,这可能导致处理器流水线中的ROB刷新.即使这并不是很糟糕,它就像任何其他错误预测的分支一样.

我听到一些人在Stack Overflow上回答:

  1. 你永远不知道系统调用需要多长时间 - [我]是的,但是任何功能都是如此.所需的时间取决于功能
  2. 它通常是安排现场. - [me]进程可以重新安排,即使它一直在用户模式下运行.例如,while(1);不保证无上下文切换.

实际的系统调用成本来自哪里?

performance x86 kernel system-calls

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

双C++精度损失

我正在开发一个在linux环境下运行的C++应用程序.我需要存储6个deciaml位置的大值.我用了一个双.但是在赋值之后,double变量不包含确切的值.它完善了.

例如:

double dValue = 79447461534242.913072; //Assignement of value
Run Code Online (Sandbox Code Playgroud)

但在那之后,当我看到dValue中的值时,它就像79447461534242.906

有人可以告诉我为什么会这样,并建议我正确的数据类型,它可以保持精确的值而不会失去精度.

c++

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

x86 jmp注册

所以我有一个地址,%eax我想jmp但代码不会编译,有没有办法解决这个问题?

movl 0xdeadbeef, %eax

jmp %eax ; <--- compile error: type mismatch for 'jmp'
Run Code Online (Sandbox Code Playgroud)

x86 assembly

7
推荐指数
3
解决办法
5389
查看次数

比较两个字符串值

我想比较两个字符串值,如下所示:

if (lblCapacity.Text <= lblSizeFile.Text)
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

c# string compare

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

我可以使用像foo <T ...,int,U ...>这样的模式来部分地专门化模板吗?

如果可以,则可以索引到可变参数模板参数包而不进行递归.但是,海湾合作委员会拒绝接受我的部分专业化:

template <int I, typename List>
struct element_impl;

template <typename... TL, int... IL, typename T, int I, typename... TR, int... IR>
struct element_impl<I, typelist<pair<TL,IL>..., pair<T,I>, pair<TR,IR>...>> {
    typedef T type;
};
Run Code Online (Sandbox Code Playgroud)

prog.cpp:实例化' element<0, typelist<int, double, char, float, long int> >':
prog.cpp:52:34:从这里实例化
prog.cpp:47:79:错误:无效使用不完整类型' struct element_impl<0, typelist<pair<int, 0>, pair<double, 1>, pair<char, 2>, pair<float, 3>, pair<long int, 4> >'

是GCC有缺陷的,还是我忽略了可变参数模板的一些限制?

c++ templates variadic-templates c++11

6
推荐指数
1
解决办法
393
查看次数

检测到堆栈已满

在编写C++代码时,我了解到使用堆栈存储内存是个好主意.

但最近我遇到了一个问题:

我有一个实验,其代码如下所示:

void fun(const unsigned int N) {
    float data_1[N*N];
    float data_2[N*N];

    /* Do magic */
}
Run Code Online (Sandbox Code Playgroud)

代码随机抽取了一个seqmentation故障,我不明白为什么.

事实证明,问题是我试图在我的堆栈中存储大的东西,有没有办法检测到这个?或者至少检测到它出错了?

c++ stack-overflow stack segmentation-fault

6
推荐指数
1
解决办法
1942
查看次数

调度程序的RTC与PIT

我的教授说,建议使用PIT而不是RTC来实现基于纪元的循环调度程序.他没有真正提到任何具体原因,我也想不出任何理由.有什么想法吗?

operating-system osdev

6
推荐指数
1
解决办法
1307
查看次数