天道酬勤,学无止境

structure

structure padding on 64bit machine

问题 struct A { uint32_t var1; uint32_t var2; uint32_t var3; uint32_t var4; uint32_t var5; }; 在上述结构中,编译器不填充并分配 20 个字节。 现在我们有另一个结构,它包含一个 8 字节变量而不是两个 4 字节。在这种情况下,编译器填充并分配 24 字节给这个结构。 struct B { uint32_t var1; uint32_t var2; uint32_t var3; uint64_t var5; }; 为什么会有这样的行为? 如果编译器将数据对齐到 8 字节边界,那么第一个结构中应该有 4 个字节的填充,并且在这种情况下不应该填充第二个结构。 并且如果编译器将数据对齐到 4 字节边界,那么为什么在第二个结构中有 4 字节的填充? 编译器:GCC 平台:64 位 linux , x86_64 回答1 对齐规则(在 x86 和 x86_64 上)通常是根据变量的大小对齐变量。 换句话说,32 位变量在 4 个字节上对齐,64 位变量在 8 个字节上对齐,等等。 在您的第二种情况下,之间添加了 4 个字节的填充 uint32_t var3; uint64_t var5; 让var5对齐 8 个字节。 出于这个原因,最好将数据成员从大到小排序(但由于数据局部性、可读性等原因,这并不是那么简单

2022-05-14 18:24:31    分类:技术分享    c++   c   structure   padding

C# - Adding objects dynamically (adding dynamic property names)

问题 我正在尝试创建一些动态ExpandoObject 。 我遇到了某个问题。 因为我不知道我的对象中这些不同属性的名称应该是什么,所以我不能这样做: var list = new ArrayList(); var obj = new ExpandoObject(); obj.ID = 1, obj.Product = "Pie", obj.Days = 1, obj.QTY = 65 list.Add(obj); 让我解释一下我的情况:我希望从一个随机数据库中获取数据(我不知道是哪个,但是根据我从 UI 获得的信息构建一个连接字符串),因此我不知道我需要获取什么数据. 这可能是数据库表的示例 表销售 编号:整数, 产品:nvarchar(100), 天数:整数, 数量:大整数 这可能是另一个例子: 表 Foobar 编号:整数, 天数:整数数量:大整数 Product_Id:整数 Department_Id:整数 如您所见,我不知道数据库是什么样的(这是 100% 匿名的,因此它需要是 100% 动态的),并且我想要返回的数据应该看起来像一个构造良好的 JSON,如下所示: [ { "ID": 1, "Product": "Pie" "Days": 1, "QTY": 65 }, { "ID": 2, "Product": "Melons" "Days": 5, "QTY"

2022-05-12 01:06:15    分类:技术分享    c#   json   dynamic   structure   expandoobject

Are For loops evil in R?

问题 我听说您不打算将程序编程风格强加到 R 上。我发现这很难。 我刚刚用 for 循环解决了一个问题。 这是错的吗? 有没有更好、更“R 风格”的解决方案? 问题:我有两列:Col1 和 Col2。 Col1 包含以自由格式输入的职位。 我想使用 Col2 将这些职称归类(因此“初级技术员”、“工程技术员”和“机械技术员”都列为“技术员”。 我已经这样做了: jobcategories<-list( "Junior Technician|Engineering technician|Mech. tech." = "Technician", "Manager|Senior Manager|Group manager|Pain in the ****" = "Manager", "Admin|Administrator|Group secretary" = "Administrator") for (currentjob in names(jobcategories)) { df$Col2[grep(currentjob,data$Col1)] <- jobcategories[[currentjob]] } 这会产生正确的结果,但我无法摆脱(由于我的程序经验)我没有正确使用 R 的感觉。 R 专家可以让我摆脱痛苦吗? 编辑 我被要求提供原始数据。 不幸的是,我无法提供它

2022-05-11 04:40:04    分类:技术分享    r   loops   for-loop   structure

Remove duplicates in vector of structure c++

问题 我有以下结构。 我想将结构存储在向量中。 其次,我想删除( context )上的重复值。 我究竟做错了什么? #include <iostream> #include <vector> #include <algorithm> using namespace std; //Structure struct contextElement { string context; float x; }; int main() { vector<contextElement> v1; v1.push_back({"1",1.0}); v1.push_back({"2",2.0}); v1.push_back({"1",1.0}); v1.push_back({"1",1.0}); //ERROR here auto comp = [] ( const contextElement& lhs, const contextElement& rhs ) {return lhs.context == rhs.context;}; //Remove elements that have the same context v1.erase(std::unique(v1.begin(), v1.end(),comp)); for(size_t i = 0; i < v1.size();i++) {

2022-05-09 02:16:16    分类:技术分享    c++   vector   structure   unique   duplicate-removal

dereference a pointer to a pointer to a structure

问题 gcc 4.7.2 c89 你好, 我正在尝试取消引用指向结构指针的指针,并且在执行以下操作时收到此错误消息: LOG_INFO("CHANNEL ID --- %d", *channel->id); 编译错误 request for member ‘id’ in something not a structure or union 如果我尝试将其转换为正确的指针类型,我仍然会收到相同的错误消息: LOG_INFO("CHANNEL ID --- %d", (*(channel_t*)channel->id)); 我通过声明一个新变量并分配结构指向的地址解决了这个问题: channel_t *ch = NULL; ch = *channel; LOG_INFO("CHANNEL ID --- %d", ch->id); 我只是想知道为什么前两种方法失败了。 非常感谢您的任何建议, 结构体: typedef struct tag_channel channel_t; struct tag_channel { size_t id; char *name; }; 我这样称呼它: channel_t *channel = NULL; channel = (channel_t*)apr_pcalloc(mem_pool, sizeof *channel); LOG_CHECK(job

2022-05-04 18:47:03    分类:技术分享    c   pointers   structure   operator-precedence

Simple way to implement a group of queues in Fortran?

问题 假设我需要在一个过程中实现至少 5 个队列,每个队列都来自不同的定义类型。 如何以简单而简短的方式实现这一目标? 另一种看待问题的方式是我遇到的问题:在 fortran 中定义我自己的结构很多时间之后,我不得不用 C++ 编写一个程序,然后我看到模板的使用是多么容易......现在,我想用我的母语做同样的事情...... 似乎知识并不总是令人舒服 非常感谢! 回答1 回答2 我已经在 Ruby 中实现了 fortran 模板,它集成在我的 CodeMate 中。 模板语法类似于 C++。 我已经实现了双链表。 模板定义片段如下: ... template:list_t <type elem_t> type list_t integer :: num_elem = 0 type(elem_t), pointer :: head, tail contains ... procedure :: insert => list_insert ... end type list ... template:list_insert@list_t <type elem_t> subroutine list_insert(this, elem, ...) class(list_t), intent(inout) :: this type(elem_t), intent(out), pointer

2022-05-04 08:57:03    分类:技术分享    templates   fortran   structure

C - Change all values of an array of structures in one line

问题 我可以声明一个结构: typedef struct { int var1; int var2; int var3; } test_t; 然后使用默认值创建这些结构结构的数组: test_t theTest[2] = { {1,2,3}, {4,5,6} }; 但是在我创建了数组之后,有没有什么方法可以像我上面所做的那样改变值,只使用一行,明确指定每个值而没有循环? 回答1 在 C99 中,您可以在一行中分配每个结构。 我不认为你可以在一行中分配结构数组。 C99 引入了复合文字。 在此处查看 Dobbs 博士的文章:新 C:复合文字 theTest[0] = (test_t){7,8,9}; theTest[1] = (test_t){10,11,12}; 您可以分配给这样的指针: test_t* p; p = (test_t [2]){ {7,8,9}, {10,11,12} }; 您也可以使用 memcpy: memcpy(theTest, (test_t [2]){ {7,8,9}, {10,11,12} }, sizeof(test_t [2]); 以上在 linux 上使用gcc -std=c99 (版本 4.2.4)进行了测试。 您应该阅读 Dobbs 博士的文章以了解复合文字的工作原理。 回答2 memset(struct_array, 0, sizeof

2022-05-04 02:14:07    分类:技术分享    c   arrays   initialization   structure

dereference a pointer to a pointer to a structure

gcc 4.7.2 c89 Hello, I am trying to dereference a pointer to a pointer to a structure, and I get this error message when I do the following: LOG_INFO("CHANNEL ID --- %d", *channel->id); Compile error request for member ‘id’ in something not a structure or union If I try and cast it to the correct pointer type, I still get the same error message: LOG_INFO("CHANNEL ID --- %d", (*(channel_t*)channel->id)); I solved the problem by declaring a new variable and assigning the address of where the structure is pointing to: channel_t *ch = NULL; ch = *channel; LOG_INFO("CHANNEL ID --- %d", ch->id); I

2022-05-02 21:28:46    分类:问答    c   pointers   structure   operator-precedence

methods in constructors, bad?

I have a windows form, and I have a class that checks a text file to make sure it has certain aspect. Now I have methods in a constructor and it seems a little weird. Should I just leave the constructor blank, and implement a start() type method and call that? So far my code looks like this public class Seating { private int segments = 0; public Seating() { checkInvoice(); getSegmentCount(); } }

2022-05-02 18:32:54    分类:问答    c#   structure   coding-style

python using for loop in def function

I am trying to get documents created in past 7 days in DB collection. fmt = "%Y-%m-%d" today = datetime.now(timezone('Asia/Seoul')) for i in range(0, 7): target = today - timedelta(days = i) week = target.strftime(fmt) hot_posts = list(db.collection.find({'date': week}, {'_id': False}).sort('like', -1)) print(hot_posts) this gives me correct document set that I am looking for from DB. but when I insert this in def function, it doesn't work. fmt = "%Y-%m-%d" today = datetime.now(timezone('Asia/Seoul')) @app.route('/api/list/hot', methods=['GET']) def show_hot(): for i in range(0, 7): target =

2022-05-02 15:55:01    分类:问答    python   function   for-loop   structure