标签: struct

为什么GCC不优化结构?

系统要求某些基元与存储器内的某些点对齐(对于4的倍数的字节,对于2的倍数的字节的短路,等等).当然,这些可以被优化以浪费填充中的最小空间.

我的问题是GCC为什么不自动执行此操作?更明显的启发式(从最大尺寸要求到最小尺寸的订单变量)是否缺乏某种方式?一些代码是否依赖于其结构的物理排序(这是一个好主意)?

我只是问,因为GCC在很多方面都是超级优化的,但不是在这个方面,我认为必须有一些相对很酷的解释(我不知道).

c optimization gcc struct

46
推荐指数
4
解决办法
9205
查看次数

内存中C++对象的结构与结构

如果我有一个课程如下

   class Example_Class 
   {
       private:
         int x; 
         int y; 
       public: 
         Example_Class() 
         { 
             x = 8;
             y = 9;
         }
       ~Example_Class() 
       { } 
   };
Run Code Online (Sandbox Code Playgroud)

结构如下

struct
{
   int x;
   int y;
} example_struct;
Run Code Online (Sandbox Code Playgroud)

记忆中的结构是否 example_struct与其相似Example_Class

例如,如果我执行以下操作

struct example_struct foo_struct;
Example_Class foo_class = Example_Class();

memcpy(&foo_struct, &foo_class, sizeof(foo_struct));
Run Code Online (Sandbox Code Playgroud)

foo_struct.x = 8foo_struct.y = 9(即:与foo_class中的x,y值相同的值)?

我问的原因是我有一个C++库(不想改变它),它与C代码共享一个对象,我想用一个结构来表示来自C++库的对象.我只对对象的属性感兴趣.

我知道理想的情况是将Example_class包装在C和C++代码之间的公共结构中,但是更改正在使用的C++库并不容易.

c++ struct

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

不透明的C结构:它们应该如何声明?

我已经看到以下两种在C API中声明不透明类型的样式.使用一种风格而不是另一种风格有明显的优势吗?

选项1

// foo.h
typedef struct foo * fooRef;
void doStuff(fooRef f);

// foo.c
struct foo {
    int x;
    int y;
};
Run Code Online (Sandbox Code Playgroud)

选项2

// foo.h
typedef struct _foo foo;
void doStuff(foo *f);

// foo.c
struct _foo {
    int x;
    int y;
};
Run Code Online (Sandbox Code Playgroud)

c struct coding-style typedef opaque-pointers

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

什么是在C11中有用的匿名结构和联合?

除其他事项外,C11还增加了"匿名结构和联盟".

我四处寻找,但无法找到匿名结构和工会何时有用的明确解释.我问,因为我不完全明白它们是什么.我得知它们之后是没有名字的结构或联合,但我总是(必须?)将其视为一个错误,所以我只能设想一个用于命名结构的用法.

c struct c11

46
推荐指数
5
解决办法
4万
查看次数

如何在C中包含动态数组INSIDE结构?

我环顾四周,但一直无法找到解决问题的问题.这是我的代码:

 #include <stdlib.h>

struct my_struct {
    int n;
    char s[]
};

int main()
{
    struct my_struct ms;
    ms.s = malloc(sizeof(char*)*50);
}
Run Code Online (Sandbox Code Playgroud)

这里是错误gcc给我的:错误:无效使用灵活的数组成员

如果我在结构中声明s的声明,我可以编译它

char* s
Run Code Online (Sandbox Code Playgroud)

这可能是一个优秀的实现(指针算法比数组快,是吗?)但我想在ca声明中

char s[]
Run Code Online (Sandbox Code Playgroud)

是相同的

char* s
Run Code Online (Sandbox Code Playgroud)

c arrays struct pointers memory-management

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

如何正确分配新的字符串值?

我试图了解如何以最干净/最安全的方式解决C中的这个微不足道的问题.这是我的例子:

#include <stdio.h>

int main(int argc, char *argv[])
{
    typedef struct
    {
        char name[20];
        char surname[20];
        int unsigned age;
    } person;

    //Here i can pass strings as values...how does it works?
    person p = {"John", "Doe",30};

    printf("Name: %s; Age: %d\n",p.name,p.age);
    // This works as expected...
    p.age = 25;
    //...but the same approach doesn't work with a string
    p.name = "Jane";

    printf("Name: %s; Age: %d\n",p.name,p.age);

    return 1;
}
Run Code Online (Sandbox Code Playgroud)

编译器的错误是:

main.c:在函数'main'中:main.c:18:错误:从类型'char*'分配类型'char [20]'时出现不兼容的类型

我知道C(不是C++)没有字符串类型而是使用字符数组,所以另一种方法是更改​​示例结构以保存字符指针:

#include <stdio.h>

int main(int argc, char *argv[])
{
    typedef …
Run Code Online (Sandbox Code Playgroud)

c string struct strcpy

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

间接的枚举和结构

首先,我想说,我知道在SO中有很多文章和问题引用了indirectSwift中的关键字.

最常用的解释indirect是允许递归枚举.

indirect我想知道它是如何允许我们使用递归枚举的,而不是只知道允许我们做什么.

问题:

是因为枚举是值类型,如果它们是以递归结构构建的,那么值类型不能很好地扩展?为什么?

indirect修改值类型行为是否更像行为类型?

以下两个例子编译得很好.有什么不同?

indirect enum BinaryTree<T> {
  case node(BinaryTree<T>, T, BinaryTree<T>)
  case empty
}

enum BinaryTree<T> {
  indirect case node(BinaryTree<T>, T, BinaryTree<T>)
  case empty
}
Run Code Online (Sandbox Code Playgroud)

enums struct swift

45
推荐指数
1
解决办法
8938
查看次数

在C#中初始化一个结构数组

如何尽可能清楚地初始化const/static数组结构?

class SomeClass
{

    struct MyStruct
    {
        public string label;
        public int id;
    };

    const MyStruct[] MyArray = {
          {"a", 1}
          {"b", 5}
          {"q", 29}
    };
};
Run Code Online (Sandbox Code Playgroud)

c# arrays struct

44
推荐指数
3
解决办法
13万
查看次数

C中结构的大小

可能重复:
为什么structof sizeof不等于每个成员的sizeof之和?

考虑以下C代码:

#include <stdio.h>    

struct employee
{
  int id;
  char name[30];  
};

int main()
{
  struct employee e1;      
  printf("%d %d %d", sizeof(e1.id), sizeof(e1.name), sizeof(e1));
  return(0);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

4 30 36

为什么结构的大小不等于其各个组件变量的大小总和?

c struct structure-packing

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

为什么这是作为结构实现的?

在System.Data.Linq中,EntitySet<T>使用几个ItemList<T>结构,如下所示:

 internal struct ItemList<T> where T : class
  {
    private T[] items;
    private int count;
    ...(methods)...
  }
Run Code Online (Sandbox Code Playgroud)

(花了我比它应该发现的更长的时间 - 无法理解为什么实体字段EntitySet<T>没有抛出空引用异常!)

我的问题是,将它作为一个类的结构实现它有什么好处?

c# linq struct

43
推荐指数
5
解决办法
1297
查看次数