小编陳 力*_*陳 力的帖子

在Clion的调试器中,如何显示int数组的全部内容

现在它只显示数组的第一个元素,但我想要显示数组中的所有元素.我认为Clion正在使用GDB.

编辑:我特指堆上的数组.可以可视化堆栈上的数组.

c c++ debugging gdb clion

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

为什么 __libc_start_main 的地址在 GDB 中始终相同,即使 ASLR 已打开?

Breakpoint 1, 0x00007ffff7de8060 in __libc_start_main () from /usr/lib/libc.so.6
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/firstlove/projects/org-ioslide/example/a.out 

Breakpoint 1, 0x00007ffff7de8060 in __libc_start_main () from /usr/lib/libc.so.6
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/firstlove/projects/org-ioslide/example/a.out 

Breakpoint 1, 0x00007ffff7de8060 in __libc_start_main () from /usr/lib/libc.so.6
(gdb) Quit
(gdb) quit
A debugging session is active.

        Inferior 1 [process …
Run Code Online (Sandbox Code Playgroud)

c linux gdb libc aslr

17
推荐指数
1
解决办法
685
查看次数

页码和偏移量

我正在学习不同类型的内存管理.我不明白在虚拟地址中有一个偏移位.还有为什么页面大小的功效2

  • 我的主要困惑是:给我一个示例,说明在指令中使用偏移来访问某个虚拟地址?

  • 我的第二个困惑是:通常的说法是,如果逻辑地址的大小是2^m和页面大小是2^n,则逻辑地址的高位mn位指定页码.

operating-system page-numbering page-size os161

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

在C++中取消定义一个typedef?

我正在开发一个庞大的项目,它有一个文件啊,其代码有一行

typedef unsigned __int16   Elf64_Half;
Run Code Online (Sandbox Code Playgroud)

此外,由于我在Linux上构建并使用dlinfo函数,我必须link.h在我的项目中包含文件.这就是它产生冲突的地方,因为我有两个具有相同名称的typedef Elf64_Half.(Linux link.h包括elftypes.h,它也有:) typedef unsigned short Elf64_Half;.

在这种情况下我该怎么办?我有唯一的选择,改变我的typedef a.h?请记住,这不是太容易,因为项目很大,我将不得不在几个地方做出改变.

有没有办法解开 typedef或什么?

c++ linux typedef header-files

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

有关在Effective C++中实现nullptr的一些问题,Scott Meyers,第二版?

const // It is a const object...
class nullptr_t 
{
  public:
    template<class T>
    inline operator T*() const // convertible to any type of null non-member pointer...
    { return 0; }

    template<class C, class T>
    inline operator T C::*() const   // or any type of null member pointer...
    { return 0; }

  private:
    void operator&() const;  // Can't take address of nullptr

} nullptr = {};
Run Code Online (Sandbox Code Playgroud)
  1. operator T*() const并且operator T C::*() const已经在类中定义,因此它可以自动内联.那么,为什么inline要再添加?
  2. 为什么void operator&() const; …

c++

12
推荐指数
1
解决办法
575
查看次数

为什么我们不能在内核开发中使用C标准库函数?

我刚开始学习内核开发并且有一点疑问.为什么我们不能在将它与c库链接后在内核开发中使用c函数?为什么内核永远不会与ac库链接,而是有自己的一些标准c函数的实现,printk()而不是printf().如果内核是用c编写的并且在ac编译器的帮助下编译的话,为什么我们不能使用c库中的标准函数呢?

linux linux-kernel

11
推荐指数
1
解决办法
7032
查看次数

如何使用TCMalloc?

首先,我想知道如何TCmalloc在Ubuntu中安装.然后我需要一个程序使用TCmalloc.然后我需要一个小程序来表明它TCmalloc比工作更好PTmalloc.

tcmalloc

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

为什么constexpr需要其他工作?

我试图以if constexpr下列方式使用:

template<template <typename First, typename Second> class Trait,
    typename First, typename Second, typename... Rest>
constexpr bool binaryTraitAre_impl()
{
    if constexpr (sizeof... (Rest) == 0)
    {
        return Trait<First, Second>{}();    
    }
    return Trait<First, Second>{}() and binaryTraitAre_impl<Trait, Rest...>();
}
Run Code Online (Sandbox Code Playgroud)

用例示例:

static_assert(binaryTraitAre_impl<std::is_convertible,
    int, int&,
    int*, void*>());
Run Code Online (Sandbox Code Playgroud)

但这无法编译

clang:

error: no matching function for call to 'binaryTraitAre_impl'
        return Trait<First, Second>{}() and binaryTraitAre_impl<Trait, Rest...>();
                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

gcc:

prog.cc: In instantiation of 'constexpr bool binaryTraitAre_impl() [with Trait = std::is_convertible; First = int*; Second …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-meta-programming c++17 if-constexpr

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

是否存在与堆内存分配相关的内存开销(例如堆中的标记)?

使用最近的Visual Studio C++编译器在Windows上特别考虑C++,我想知道实现:

假设我正在使用发布编译器,并且我不关心内存碎片/打包问题,是否存在与在堆上分配内存相关的内存开销?如果是这样,大概每个分配的字节数可能是多少?它会比64-bit代码更大32-bit吗?

我对现代实现并不是很了解,但我想知道每次分配是否有写入堆的标记,或者是否维护某种表(如文件分配表).

在一个相关点(因为我主要考虑标准库功能,如'map'),Microsoft标准库实现是否曾使用自己的分配器(对于像树节点这样的东西)来优化使用?

c++ windows heap memory-management visual-studio

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

`type_alias <char [N]> {}`函数参数中的VS`char [N] {}`

  • 环境:x86-64 Clang 6.0.0

函数的定义:

void foo(const char*) {}
Run Code Online (Sandbox Code Playgroud)
  1. foo(char[16]{}); //houston, there is a problem!
  2. foo(type_alias<char[16]>{}); //compile happily

type_alias 很简单:

template<typename T>
using type_alias = T;
Run Code Online (Sandbox Code Playgroud)

live demon


作为评论说明,case 1虽然case 2可以编译.

我知道alias declarationswith using不是文本替换(例如#define),它是该类型的同义词.

但我仍然无法弄清楚如何解释这种情况.然后我给GCC一个try:

prog.cc: In function 'int main()':
prog.cc:11:7: error: expected primary-expression before 'char'
   foo(char[16]{});
       ^~~~
prog.cc:12:7: error: taking address of temporary array
   foo(type_alias<char[16]>{});
       ^~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

啊,GCC给了我一个错误!然后我用两个编译器的不同版本编译它:

  • Clang的错误消息case 1是:

prog.cc:11:11:错误:期望'('用于函数式转换或类型构造

foo(char[16]{});
      ~~~~^ …
Run Code Online (Sandbox Code Playgroud)

c++ gcc arguments clang language-lawyer

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